{
  "files": [
    {
      "name": "keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto",
      "description": "Сервис реализует функционал управления приборами учёта(ПУ)",
      "package": "keyapis.telemetry_control.v1",
      "hasEnums": false,
      "hasExtensions": false,
      "hasMessages": true,
      "hasServices": true,
      "enums": [
        {
          "name": "AccountingType",
          "longName": "Device.MetricPoint.AccountingType",
          "fullName": "keyapis.telemetry_control.v1.Device.MetricPoint.AccountingType",
          "description": "Справочник типов учёта",
          "values": [
            {
              "name": "ACCOUNTING_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "COMMERCIAL",
              "number": "1",
              "description": "Коммерческий учёт"
            },
            {
              "name": "TECHNICAL",
              "number": "2",
              "description": "Технический учёт"
            }
          ]
        },
        {
          "name": "MetricType",
          "longName": "Device.MetricPoint.MetricType",
          "fullName": "keyapis.telemetry_control.v1.Device.MetricPoint.MetricType",
          "description": "Справочние типов энергоресурсов",
          "values": [
            {
              "name": "METRIC_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "HOT_WATER",
              "number": "1",
              "description": "Горячая вода"
            },
            {
              "name": "COLD_WATER",
              "number": "2",
              "description": "Холодная вода"
            },
            {
              "name": "HEAT",
              "number": "3",
              "description": "Теплоэнергия"
            },
            {
              "name": "GAS",
              "number": "4",
              "description": "Газ"
            },
            {
              "name": "ELECTRICITY",
              "number": "5",
              "description": "Электроэнергия"
            }
          ]
        },
        {
          "name": "PrimaryCurrentType",
          "longName": "Device.MetricPoint.PrimaryCurrentType",
          "fullName": "keyapis.telemetry_control.v1.Device.MetricPoint.PrimaryCurrentType",
          "description": "Справочник типов номиналов первичных токов.\nУ выпускаемых трансформаторов тока (А)",
          "values": [
            {
              "name": "PRIMARY_CURRENT_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "TT1A",
              "number": "1",
              "description": "1 (А)"
            },
            {
              "name": "TT5A",
              "number": "2",
              "description": "5 (А)"
            },
            {
              "name": "TT10A",
              "number": "3",
              "description": "10 (А)"
            },
            {
              "name": "TT15A",
              "number": "4",
              "description": "15 (А)"
            },
            {
              "name": "TT20A",
              "number": "5",
              "description": "20 (А)"
            },
            {
              "name": "TT30A",
              "number": "6",
              "description": "30 (А)"
            },
            {
              "name": "TT40A",
              "number": "7",
              "description": "40 (А)"
            },
            {
              "name": "TT50A",
              "number": "8",
              "description": "50 (А)"
            },
            {
              "name": "TT75A",
              "number": "9",
              "description": "75 (А)"
            },
            {
              "name": "TT80A",
              "number": "10",
              "description": "80 (А)"
            },
            {
              "name": "TT100A",
              "number": "11",
              "description": "100 (А)"
            },
            {
              "name": "TT150A",
              "number": "12",
              "description": "150 (А)"
            },
            {
              "name": "TT200A",
              "number": "13",
              "description": "200 (А)"
            },
            {
              "name": "TT300A",
              "number": "14",
              "description": "300 (А)"
            },
            {
              "name": "TT400A",
              "number": "15",
              "description": "400 (А)"
            },
            {
              "name": "TT500A",
              "number": "16",
              "description": "500 (А)"
            },
            {
              "name": "TT600A",
              "number": "17",
              "description": "600 (А)"
            },
            {
              "name": "TT750A",
              "number": "18",
              "description": "750 (А)"
            },
            {
              "name": "TT800A",
              "number": "19",
              "description": "800 (А)"
            },
            {
              "name": "TT1000A",
              "number": "20",
              "description": "1000 (А)"
            },
            {
              "name": "TT1200A",
              "number": "21",
              "description": "1200 (А)"
            },
            {
              "name": "TT1500A",
              "number": "22",
              "description": "1500 (А)"
            },
            {
              "name": "TT2000A",
              "number": "23",
              "description": "2000 (А)"
            }
          ]
        },
        {
          "name": "StatusType",
          "longName": "Device.MetricPoint.StatusType",
          "fullName": "keyapis.telemetry_control.v1.Device.MetricPoint.StatusType",
          "description": "Справочник типов статусов",
          "values": [
            {
              "name": "STATUS_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ACTIVE",
              "number": "1",
              "description": "Активная"
            },
            {
              "name": "WRONG",
              "number": "2",
              "description": "Не активная",
              "options": {
                "deprecated": true
              }
            },
            {
              "name": "ARCHIVE",
              "number": "3",
              "description": "Архивная"
            }
          ]
        },
        {
          "name": "PipeType",
          "longName": "Device.PipeType",
          "fullName": "keyapis.telemetry_control.v1.Device.PipeType",
          "description": "Справочник типов трубопроводов",
          "values": [
            {
              "name": "PIPE_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "INFEED",
              "number": "1",
              "description": "Подающий"
            },
            {
              "name": "CIRCULATING",
              "number": "2",
              "description": "Циркуляционный"
            }
          ]
        },
        {
          "name": "PlanType",
          "longName": "Device.PlanType",
          "fullName": "keyapis.telemetry_control.v1.Device.PlanType",
          "description": "Справочник типов тарифных планов",
          "values": [
            {
              "name": "PLAN_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "SINGLE",
              "number": "1",
              "description": "Однотарифный"
            },
            {
              "name": "DOUBLE",
              "number": "2",
              "description": "Двухтарифный"
            },
            {
              "name": "TRIPLE",
              "number": "3",
              "description": "Трёхтарифный"
            }
          ]
        },
        {
          "name": "SecondaryCurrentType",
          "longName": "Device.SecondaryCurrentType",
          "fullName": "keyapis.telemetry_control.v1.Device.SecondaryCurrentType",
          "description": "Справочник типов номинальных нагрузок вторичных обмоток.\nУ трансформаторов тока (В*А)",
          "values": [
            {
              "name": "SECONDARY_CURRENT_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "TT1A",
              "number": "1",
              "description": "1 (А)"
            },
            {
              "name": "TT2A",
              "number": "2",
              "description": "2 (А)"
            },
            {
              "name": "TT5A",
              "number": "3",
              "description": "5 (А)"
            }
          ]
        },
        {
          "name": "StatusType",
          "longName": "Device.StatusType",
          "fullName": "keyapis.telemetry_control.v1.Device.StatusType",
          "description": "Справочник типов статусов",
          "values": [
            {
              "name": "STATUS_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "RECEIVED",
              "number": "1",
              "description": "Получен клиентом, еще не сконфигурирован"
            },
            {
              "name": "ACTIVE",
              "number": "2",
              "description": "Сконфигурирован клиентом, активен"
            },
            {
              "name": "WRONG",
              "number": "3",
              "description": "Обработан клиентом, возникла ошибка"
            },
            {
              "name": "ARCHIVE",
              "number": "4",
              "description": "Переведен в архивный статус"
            },
            {
              "name": "DELETE",
              "number": "5",
              "description": "Удален"
            },
            {
              "name": "UNLINK",
              "number": "6",
              "description": "Отсоединен"
            }
          ]
        },
        {
          "name": "Type",
          "longName": "Device.Type",
          "fullName": "keyapis.telemetry_control.v1.Device.Type",
          "description": "Справочник типов приборов учёта(ПУ)",
          "values": [
            {
              "name": "TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "HUB",
              "number": "1",
              "description": "Коммуникационный модуль"
            },
            {
              "name": "PULSE_COUNTER_RECORDER",
              "number": "2",
              "description": "Счетчик импульсов - регистратор"
            },
            {
              "name": "PULSE_COUNTER_RECORDER_LR",
              "number": "3",
              "description": "Счетчик импульсов - регистратор LoRaWAN"
            },
            {
              "name": "METERING_DEVICE",
              "number": "4",
              "description": "Прибор учета расхода коммунальных услуг"
            },
            {
              "name": "INTERFACE_CONVERTER",
              "number": "5",
              "description": "Конвертер интерфейсов"
            },
            {
              "name": "M_BUS_HUB",
              "number": "6",
              "description": "M-BUS концентратор"
            },
            {
              "name": "COMMUNICATION_MODULE_LR",
              "number": "7",
              "description": "Модуль связи LoRaWAN"
            },
            {
              "name": "BASE_LR",
              "number": "8",
              "description": "Базовая станция LoRaWAN"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "DeviceGroupPaging.DirectionType",
          "fullName": "keyapis.telemetry_control.v1.DeviceGroupPaging.DirectionType",
          "description": "Справочник типов направлений сортировки",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "DeviceGroupPaging.OrderByType",
          "fullName": "keyapis.telemetry_control.v1.DeviceGroupPaging.OrderByType",
          "description": "Справочник типов сортировки",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "GROUP_ID",
              "number": "1",
              "description": "По Идентификатору группы пользователя"
            },
            {
              "name": "DEVICE_ID",
              "number": "2",
              "description": "По ПУ"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "DeviceIndicatorMetricPointPaging.DirectionType",
          "fullName": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging.DirectionType",
          "description": "Справочник типов направлений сортировки",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "DeviceIndicatorMetricPointPaging.OrderByType",
          "fullName": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging.OrderByType",
          "description": "Справочник типов сортировки",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "INDICATOR_ID",
              "number": "1",
              "description": "По Идентификатору индикатора"
            },
            {
              "name": "METRIC_POINT_ID",
              "number": "2",
              "description": "По По Идентификатору ТУ"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "DevicePaging.DirectionType",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging.DirectionType",
          "description": "Справочник типов направлений сортировки",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "DevicePaging.OrderByType",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging.OrderByType",
          "description": "Справочник типов значений сортировки",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ID",
              "number": "1",
              "description": "По идентификатору"
            }
          ]
        },
        {
          "name": "ArchiveType",
          "longName": "Indicator.ArchiveType",
          "fullName": "keyapis.telemetry_control.v1.Indicator.ArchiveType",
          "description": "Справочник типа архивности показаний.\nИспользуется для указания за какой период произошло измерение.\nПо умолчанию CURRENT",
          "values": [
            {
              "name": "ARCHIVE_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "CURRENT",
              "number": "1",
              "description": "Текущие показания"
            },
            {
              "name": "HALFHOUR",
              "number": "2",
              "description": "За 30 мин"
            },
            {
              "name": "HOUR",
              "number": "3",
              "description": "За час"
            },
            {
              "name": "DAY",
              "number": "4",
              "description": "За сутки"
            },
            {
              "name": "MONTH",
              "number": "5",
              "description": "За месяц"
            },
            {
              "name": "YEAR",
              "number": "6",
              "description": "За год"
            }
          ]
        },
        {
          "name": "SignType",
          "longName": "Indicator.SignType",
          "fullName": "keyapis.telemetry_control.v1.Indicator.SignType",
          "description": "Справочник типов измерений",
          "values": [
            {
              "name": "SIGN_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ABSOLUTE_DS",
              "number": "1",
              "description": "Абсолютный показатель"
            },
            {
              "name": "ABSOLUTE_RC",
              "number": "2",
              "description": "Абсолютный расход ресурса"
            },
            {
              "name": "INTERVAL_DS",
              "number": "3",
              "description": "Интервальный показатель состояния"
            },
            {
              "name": "INTERVAL_RC",
              "number": "4",
              "description": "Интервальный расход ресурса"
            },
            {
              "name": "CURRENT_DS",
              "number": "5",
              "description": "Текущее состояние"
            },
            {
              "name": "CURRENT_RS",
              "number": "6",
              "description": "Текущее состояние ресурса"
            },
            {
              "name": "VOLUME",
              "number": "7",
              "description": "Объём"
            },
            {
              "name": "PARAMETER",
              "number": "8",
              "description": "Параметр конфигурации"
            },
            {
              "name": "FLAG",
              "number": "9",
              "description": "Флаг состояния"
            }
          ]
        },
        {
          "name": "UnitType",
          "longName": "Indicator.UnitType",
          "fullName": "keyapis.telemetry_control.v1.Indicator.UnitType",
          "description": "Справочник типов единиц измерений",
          "values": [
            {
              "name": "UNIT_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "PERCENT",
              "number": "1",
              "description": "Процент"
            },
            {
              "name": "C",
              "number": "2",
              "description": "Градус по Цельсию"
            },
            {
              "name": "WT",
              "number": "3",
              "description": "Ватт"
            },
            {
              "name": "GKAL",
              "number": "4",
              "description": "Гигакалория"
            },
            {
              "name": "VALUE",
              "number": "5",
              "description": "Количество"
            },
            {
              "name": "KWH",
              "number": "6",
              "description": "Киловaтт-час"
            },
            {
              "name": "KG_CM2",
              "number": "7",
              "description": "Килограмм на квадратный сантиметр"
            },
            {
              "name": "KGF_CM2",
              "number": "8",
              "description": "Килограмм-сила на квадратный сантиметр"
            },
            {
              "name": "M3",
              "number": "9",
              "description": "Кубический метр"
            },
            {
              "name": "M3_H",
              "number": "10",
              "description": "Кубический метр в час"
            },
            {
              "name": "MPA",
              "number": "11",
              "description": "Мегапаскаль"
            },
            {
              "name": "MS",
              "number": "12",
              "description": "Миллисекунда"
            },
            {
              "name": "BOOLEAN",
              "number": "13",
              "description": "Флаг состояния"
            },
            {
              "name": "T",
              "number": "14",
              "description": "Тонна"
            },
            {
              "name": "T_H",
              "number": "15",
              "description": "Тонна в час"
            },
            {
              "name": "H",
              "number": "16",
              "description": "Час"
            },
            {
              "name": "NON_MEASURABLE",
              "number": "17",
              "description": "Безразмерная величина"
            },
            {
              "name": "IMP",
              "number": "18",
              "description": "Импульс"
            },
            {
              "name": "J",
              "number": "19",
              "description": "Джоуль"
            },
            {
              "name": "KJ",
              "number": "20",
              "description": "Килоджоуль"
            },
            {
              "name": "GJ",
              "number": "21",
              "description": "Гигаджоуль"
            },
            {
              "name": "WTH",
              "number": "22",
              "description": "Ватт-час"
            },
            {
              "name": "KWT",
              "number": "23",
              "description": "Киловатт"
            },
            {
              "name": "MIN",
              "number": "24",
              "description": "Минута"
            },
            {
              "name": "S",
              "number": "25",
              "description": "Секунда"
            }
          ]
        },
        {
          "name": "VendorType",
          "longName": "Indicator.VendorType",
          "fullName": "keyapis.telemetry_control.v1.Indicator.VendorType",
          "description": "Посредники получения показаний",
          "values": [
            {
              "name": "VENDOR_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ENVIRO",
              "number": "1",
              "description": "Энвайро"
            },
            {
              "name": "LARTECH",
              "number": "2",
              "description": "Лартех"
            },
            {
              "name": "RTK",
              "number": "3",
              "description": "РТК"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "IndicatorPaging.DirectionType",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging.DirectionType",
          "description": "Справочник типов направлений сортировки",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "IndicatorPaging.OrderByType",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging.OrderByType",
          "description": "Справочник типов сортировки",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ID",
              "number": "1",
              "description": "По уникальному ключу"
            },
            {
              "name": "SIGN_TYPE",
              "number": "2",
              "description": "По типу измерений"
            },
            {
              "name": "DEVICE_ID",
              "number": "3",
              "description": "По Прибору учета"
            },
            {
              "name": "CREATED_AT",
              "number": "4",
              "description": "По Дате создания"
            }
          ]
        }
      ],
      "extensions": [],
      "messages": [
        {
          "name": "DeleteDeviceIndicatorRequest",
          "longName": "DeleteDeviceIndicatorRequest",
          "fullName": "keyapis.telemetry_control.v1.DeleteDeviceIndicatorRequest",
          "description": "Запрос удаления индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "DeleteDeviceIndicatorResponse",
          "longName": "DeleteDeviceIndicatorResponse",
          "fullName": "keyapis.telemetry_control.v1.DeleteDeviceIndicatorResponse",
          "description": "Ответ на запрос удаления индикатора",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "DeleteDeviceRequest",
          "longName": "DeleteDeviceRequest",
          "fullName": "keyapis.telemetry_control.v1.DeleteDeviceRequest",
          "description": "Запрос удаления прибора учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "DeleteDeviceResponse",
          "longName": "DeleteDeviceResponse",
          "fullName": "keyapis.telemetry_control.v1.DeleteDeviceResponse",
          "description": "Ответ на запрос удаления прибора учета",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "Device",
          "longName": "Device",
          "fullName": "keyapis.telemetry_control.v1.Device",
          "description": "Прибор учёта",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "indicators",
              "description": "Индикаторы",
              "label": "repeated",
              "type": "Indicator",
              "longType": "Indicator",
              "fullType": "keyapis.telemetry_control.v1.Indicator",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "metric_point",
              "description": "Точка учета",
              "label": "",
              "type": "MetricPoint",
              "longType": "Device.MetricPoint",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 3
            },
            {
              "name": "created_at",
              "description": "Дата создания",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 4
            },
            {
              "name": "changed_at",
              "description": "Дата последнего изменения.\nЗаполняется и обновляется сервером.\nЗаполняется при создании и изменении.\nЯвляется версией объекта",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 5
            },
            {
              "name": "type",
              "description": "Тип прибора учёта(ПУ)",
              "label": "",
              "type": "Type",
              "longType": "Device.Type",
              "fullType": "keyapis.telemetry_control.v1.Device.Type",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 6
            },
            {
              "name": "serial_number",
              "description": "Серийный номер",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 7
            },
            {
              "name": "model",
              "description": "Производитель и модель счетчика",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 8
            },
            {
              "name": "year",
              "description": "Год выпуска счётчика",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true,
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 9
            },
            {
              "name": "fias_id",
              "description": "Идентификатор строения ФИАС",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true,
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 10
            },
            {
              "name": "resource_owner_id",
              "description": "Идентификатор владельца.\nЗаполняется сервером",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true,
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 11
            },
            {
              "name": "status_type",
              "description": "Тип статуса",
              "label": "",
              "type": "StatusType",
              "longType": "Device.StatusType",
              "fullType": "keyapis.telemetry_control.v1.Device.StatusType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 12
            },
            {
              "name": "installed_at",
              "description": "Дата установки",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 13
            },
            {
              "name": "removed_at",
              "description": "Дата удаления",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 14
            },
            {
              "name": "check_at",
              "description": "Дата предыдущей поверки счетчика",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 15
            },
            {
              "name": "next_check_at",
              "description": "Дата следующей поверки счетчика",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 16
            },
            {
              "name": "external_id",
              "description": "Внешний дентификатор прибора учёта(ПУ)",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 17
            },
            {
              "name": "plan_type",
              "description": "Тип тарифного плана",
              "label": "",
              "type": "PlanType",
              "longType": "Device.PlanType",
              "fullType": "keyapis.telemetry_control.v1.Device.PlanType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 18
            },
            {
              "name": "parent_id",
              "description": "Идентификатор хаба",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 19
            },
            {
              "name": "pipe_type",
              "description": "Тип трубопровода",
              "label": "",
              "type": "PipeType",
              "longType": "Device.PipeType",
              "fullType": "keyapis.telemetry_control.v1.Device.PipeType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 20
            },
            {
              "name": "dev_eui",
              "description": "Идентификатор модуля LoraWan",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 21
            },
            {
              "name": "mac",
              "description": "MAC-адрес",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 22
            },
            {
              "name": "port",
              "description": "Номер порта",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 23
            },
            {
              "name": "network_address",
              "description": "Сетевой адрес",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 24
            },
            {
              "name": "comm_channel",
              "description": "Канал связи.\nДля станции LoraWan",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 25
            },
            {
              "name": "sim_number",
              "description": "MSISDN SIM-карты.\nНомер телефона",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 26
            },
            {
              "name": "sim_serial",
              "description": "Серийный номер SIM-карты",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 27
            },
            {
              "name": "ip_address_sim",
              "description": "IP адрес SIM-карты",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 28
            },
            {
              "name": "placement",
              "description": "Размещение",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 29
            },
            {
              "name": "installation_place",
              "description": "Место установки",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 30
            },
            {
              "name": "appkey",
              "description": "Kлюч приложения.\nИспользуется в процессе присоединения к сети для получения сессионных ключей NwkSKey и AppSKey для LoRaWAN [128 бит]",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 31
            },
            {
              "name": "appeui",
              "description": "Идентификатор приложения.\nДля LoRaWAN [64 бита]",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 32
            },
            {
              "name": "protocol_type_label",
              "description": "Тип протокола",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 33
            },
            {
              "name": "channel_number",
              "description": "Номер канала для многоканального ПУ",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 34
            },
            {
              "name": "wire_interface",
              "description": "Тип проводного интерфейса",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 35
            },
            {
              "name": "building_id",
              "description": "Идентификатор объекта строительства",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 36
            },
            {
              "name": "manufacture_year",
              "description": "Год выпуска счётчика",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 37
            },
            {
              "name": "indicator_vendor_type",
              "description": "Посредник получения показаний",
              "label": "",
              "type": "VendorType",
              "longType": "Indicator.VendorType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.VendorType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 38
            }
          ]
        },
        {
          "name": "MetricPoint",
          "longName": "Device.MetricPoint",
          "fullName": "keyapis.telemetry_control.v1.Device.MetricPoint",
          "description": "Точка учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "metric_type",
              "description": "Тип энергоресурса",
              "label": "",
              "type": "MetricType",
              "longType": "Device.MetricPoint.MetricType",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint.MetricType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "room_number",
              "description": "Номер помещения",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 3
            },
            {
              "name": "room_label",
              "description": "Лейбл помещения",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 4
            },
            {
              "name": "zone_label",
              "description": "Зона",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "status_type",
              "description": "Тип статуса",
              "label": "",
              "type": "StatusType",
              "longType": "Device.MetricPoint.StatusType",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint.StatusType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 6
            },
            {
              "name": "accounting_type",
              "description": "Тип учёта",
              "label": "",
              "type": "AccountingType",
              "longType": "Device.MetricPoint.AccountingType",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint.AccountingType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 7
            },
            {
              "name": "created_at",
              "description": "Дата создания",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 8
            },
            {
              "name": "primary_current_type",
              "description": "Тип номинала первичного тока",
              "label": "",
              "type": "PrimaryCurrentType",
              "longType": "Device.MetricPoint.PrimaryCurrentType",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint.PrimaryCurrentType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 9
            },
            {
              "name": "secondary_current_type",
              "description": "Тип номинала вторичной обмотки",
              "label": "",
              "type": "SecondaryCurrentType",
              "longType": "Device.SecondaryCurrentType",
              "fullType": "keyapis.telemetry_control.v1.Device.SecondaryCurrentType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 10
            },
            {
              "name": "building_id",
              "description": "Идентификатор объекта строительства",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 11
            },
            {
              "name": "changed_at",
              "description": "Дата изменения",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 12
            },
            {
              "name": "building_level",
              "description": "Уровень",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 13
            },
            {
              "name": "building_section",
              "description": "Секция",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 14
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "Device.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.Device.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования protobuf",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "message",
              "description": "Валидационное сообщение",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceFilter",
          "longName": "DeviceFilter",
          "fullName": "keyapis.telemetry_control.v1.DeviceFilter",
          "description": "Фильтр для запроса приборов учета.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "fias_ids",
              "description": "По ФИАС",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "types",
              "description": "По типам приборов учета",
              "label": "repeated",
              "type": "Type",
              "longType": "Device.Type",
              "fullType": "keyapis.telemetry_control.v1.Device.Type",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "status_types",
              "description": "По типам статусов",
              "label": "repeated",
              "type": "StatusType",
              "longType": "Device.StatusType",
              "fullType": "keyapis.telemetry_control.v1.Device.StatusType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "models",
              "description": "По модели счетчика",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "metric_point_metric_types",
              "description": "По типам метрик",
              "label": "repeated",
              "type": "MetricType",
              "longType": "Device.MetricPoint.MetricType",
              "fullType": "keyapis.telemetry_control.v1.Device.MetricPoint.MetricType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "room_numbers",
              "description": "По номерам помещений точек учета, привязанных через индикаторы",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "room_labels",
              "description": "По лейблам помещений точек учета, привязанных через индикаторы",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 7
            },
            {
              "name": "parent_ids",
              "description": "По идентификаторам хабов",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 8
            },
            {
              "name": "ids",
              "description": "По идентификаторам приборов учета.\nУстарело, использовать метод GetDevice",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 9
            },
            {
              "name": "building_ids",
              "description": "По идентификатору объекта строительства",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 10
            },
            {
              "name": "serial_numbers",
              "description": "По серийным номерам",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 11
            },
            {
              "name": "metric_point_ids",
              "description": "По ID точек учета, привязанных через индикаторы",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 12
            },
            {
              "name": "serial_ids",
              "description": "Смешанный поиск по полям serial_number, dev_eui, MAC-адрес, model, external_id",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 13
            },
            {
              "name": "orpons",
              "description": "По ОРПОНам",
              "label": "repeated",
              "type": "int64",
              "longType": "int64",
              "fullType": "int64",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 14
            },
            {
              "name": "indicator_vendor_types",
              "description": "По посреднику получения показаний",
              "label": "repeated",
              "type": "VendorType",
              "longType": "Indicator.VendorType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.VendorType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 15
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "DeviceFilter.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.DeviceFilter.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования protobuf",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "message",
              "description": "Валидационное сообщение",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceGroup",
          "longName": "DeviceGroup",
          "fullName": "keyapis.telemetry_control.v1.DeviceGroup",
          "description": "Связка ПУ и группы пользователя.\nЗадает область ресурсов (resource scope), доступную пользователю.\nИспользуется для контроля доступа к ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "device_id",
              "description": "Идентификатор ПУ.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceGroupFilter",
          "longName": "DeviceGroupFilter",
          "fullName": "keyapis.telemetry_control.v1.DeviceGroupFilter",
          "description": "Фильтр для запроса связей ПУ и группы пользователя.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_ids",
              "description": "По Идентификатору группы пользователя",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "device_ids",
              "description": "По ПУ",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceGroupPaging",
          "longName": "DeviceGroupPaging",
          "fullName": "keyapis.telemetry_control.v1.DeviceGroupPaging",
          "description": "Пагинация связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nПо умолчанию: GROUP_ID",
              "label": "",
              "type": "OrderByType",
              "longType": "DeviceGroupPaging.OrderByType",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroupPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\nПо умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "DeviceGroupPaging.DirectionType",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroupPaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nМинимальное значение: 1.\nМаксимальное значение: 100.\nПо умолчанию: 20.\nЕсли значение 0 (не передано), то выставляем значение по умолчанию",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\nПо умолчанию: 0",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "DeviceIndicatorMetricPoint",
          "longName": "DeviceIndicatorMetricPoint",
          "fullName": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPoint",
          "description": "Связка индикатора и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "indicator_id",
              "description": "Идентификатор индикатора.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "metric_point_id",
              "description": "Идентификатору ТУ.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceIndicatorMetricPointFilter",
          "longName": "DeviceIndicatorMetricPointFilter",
          "fullName": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointFilter",
          "description": "Фильтр для запроса индикаторов и ТУ.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "indicator_id",
              "description": "По Идентификатору индикатора",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "metric_point_id",
              "description": "По Идентификатору ТУ",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceIndicatorMetricPointPaging",
          "longName": "DeviceIndicatorMetricPointPaging",
          "fullName": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging",
          "description": "Пагинация связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nПо умолчанию: ID",
              "label": "",
              "type": "OrderByType",
              "longType": "DeviceIndicatorMetricPointPaging.OrderByType",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\nПо умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "DeviceIndicatorMetricPointPaging.DirectionType",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nМинимальное значение: 1.\nМаксимальное значение: 100.\nПо умолчанию: 20.\nЕсли значение 0 (не передано), то выставляем значение по умолчанию",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\nПо умолчанию: 0",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "DevicePaging",
          "longName": "DevicePaging",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging",
          "description": "Пагинация устройств",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nПо умолчанию: ID",
              "label": "",
              "type": "OrderByType",
              "longType": "DevicePaging.OrderByType",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\nПо умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "DevicePaging.DirectionType",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nМинимальное значение: 1.\nМаксимальное значение: 100.\nПо умолчанию: 20.\nЕсли значение 0 (не передано), то выставляем значение по умолчанию",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\nПо умолчанию: 0",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "DevicePaging.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging.ValidationError",
          "description": "Ошибка валидации постраничной пагинации по ПУ.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "limit",
              "description": "Количество передано некорректно",
              "label": "",
              "type": "LimitInvalid",
              "longType": "DevicePaging.ValidationError.LimitInvalid",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging.ValidationError.LimitInvalid",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "offset",
              "description": "Сдвиг передан некорректно",
              "label": "",
              "type": "OffsetInvalid",
              "longType": "DevicePaging.ValidationError.OffsetInvalid",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging.ValidationError.OffsetInvalid",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "LimitInvalid",
          "longName": "DevicePaging.ValidationError.LimitInvalid",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging.ValidationError.LimitInvalid",
          "description": "Причины:\n- Значение количества \u003c 0 или \u003e 100",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "OffsetInvalid",
          "longName": "DevicePaging.ValidationError.OffsetInvalid",
          "fullName": "keyapis.telemetry_control.v1.DevicePaging.ValidationError.OffsetInvalid",
          "description": "Причины:\n- Значение сдвига \u003c 0",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "GetDeviceCountRequest",
          "longName": "GetDeviceCountRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceCountRequest",
          "description": "Запрос получения количества устройств",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр по устройствам",
              "label": "",
              "type": "DeviceFilter",
              "longType": "DeviceFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceCountResponse",
          "longName": "GetDeviceCountResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceCountResponse",
          "description": "Ответ на запрос получения количества устройств",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Всего устройств",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetDeviceCountResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.GetDeviceCountResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetDeviceCountResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceCountResponse.Error",
          "description": "Ошибка запроса получения количества устройств",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "device_filter_validation",
              "description": "Ошибка фильтрации",
              "label": "",
              "type": "ValidationError",
              "longType": "DeviceFilter.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.DeviceFilter.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceGroupCountRequest",
          "longName": "GetDeviceGroupCountRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceGroupCountRequest",
          "description": "Запрос получения количества связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей ПУ и группы пользователя",
              "label": "",
              "type": "DeviceGroupFilter",
              "longType": "DeviceGroupFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroupFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceGroupCountResponse",
          "longName": "GetDeviceGroupCountResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceGroupCountResponse",
          "description": "Ответ на запрос получения количества связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Всего связей ПУ и группы пользователя",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceGroupListRequest",
          "longName": "GetDeviceGroupListRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceGroupListRequest",
          "description": "Запрос получения списка",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей ПУ и группы пользователя",
              "label": "",
              "type": "DeviceGroupFilter",
              "longType": "DeviceGroupFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroupFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация",
              "label": "",
              "type": "DeviceGroupPaging",
              "longType": "DeviceGroupPaging",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroupPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceGroupListResponse",
          "longName": "GetDeviceGroupListResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceGroupListResponse",
          "description": "Ответ на запрос получения списка связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Связь ПУ и группы пользователя",
              "label": "",
              "type": "DeviceGroup",
              "longType": "DeviceGroup",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroup",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorCountRequest",
          "longName": "GetDeviceIndicatorCountRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountRequest",
          "description": "Запрос получения количества индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр по индикаторам",
              "label": "",
              "type": "IndicatorFilter",
              "longType": "IndicatorFilter",
              "fullType": "keyapis.telemetry_control.v1.IndicatorFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorCountResponse",
          "longName": "GetDeviceIndicatorCountResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountResponse",
          "description": "Ответ на запрос получения количества индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Всего индикаторов",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetDeviceIndicatorCountResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetDeviceIndicatorCountResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountResponse.Error",
          "description": "Ошибка запроса получения количества индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "device_filter_validation",
              "description": "Ошибка фильтрации",
              "label": "",
              "type": "ValidationError",
              "longType": "IndicatorFilter.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.IndicatorFilter.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorListRequest",
          "longName": "GetDeviceIndicatorListRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorListRequest",
          "description": "Запрос получения списка",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр индикаторов",
              "label": "",
              "type": "IndicatorFilter",
              "longType": "IndicatorFilter",
              "fullType": "keyapis.telemetry_control.v1.IndicatorFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация по индикаторам",
              "label": "",
              "type": "IndicatorPaging",
              "longType": "IndicatorPaging",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorListResponse",
          "longName": "GetDeviceIndicatorListResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorListResponse",
          "description": "Ответ на запрос получения списка индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Индикатор",
              "label": "",
              "type": "Indicator",
              "longType": "Indicator",
              "fullType": "keyapis.telemetry_control.v1.Indicator",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetDeviceIndicatorListResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorListResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetDeviceIndicatorListResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorListResponse.Error",
          "description": "Ошибка запроса получения списка индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "device_filter_validation",
              "description": "Ошибка фильтрации",
              "label": "",
              "type": "ValidationError",
              "longType": "IndicatorFilter.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.IndicatorFilter.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "device_paging_validation",
              "description": "Ошибка пагинации  по страницам",
              "label": "",
              "type": "ValidationError",
              "longType": "IndicatorPaging.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorMetricPointCountRequest",
          "longName": "GetDeviceIndicatorMetricPointCountRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointCountRequest",
          "description": "Запрос получения количества связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей индикаторов и ТУ",
              "label": "",
              "type": "DeviceIndicatorMetricPointFilter",
              "longType": "DeviceIndicatorMetricPointFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorMetricPointCountResponse",
          "longName": "GetDeviceIndicatorMetricPointCountResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointCountResponse",
          "description": "Ответ на запрос получения количества связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Всего связей индикаторов и ТУ",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorMetricPointListRequest",
          "longName": "GetDeviceIndicatorMetricPointListRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointListRequest",
          "description": "Запрос получения списка",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей индикаторов и ТУ",
              "label": "",
              "type": "DeviceIndicatorMetricPointFilter",
              "longType": "DeviceIndicatorMetricPointFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация",
              "label": "",
              "type": "DeviceIndicatorMetricPointPaging",
              "longType": "DeviceIndicatorMetricPointPaging",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPointPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorMetricPointListResponse",
          "longName": "GetDeviceIndicatorMetricPointListResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointListResponse",
          "description": "Ответ на запрос получения списка связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Связь индикатора и ТУ",
              "label": "",
              "type": "DeviceIndicatorMetricPoint",
              "longType": "DeviceIndicatorMetricPoint",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPoint",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorRequest",
          "longName": "GetDeviceIndicatorRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorRequest",
          "description": "Запрос получения индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор индикатора",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceIndicatorResponse",
          "longName": "GetDeviceIndicatorResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceIndicatorResponse",
          "description": "Ответ на запрос получения индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Индикатор",
              "label": "",
              "type": "Indicator",
              "longType": "Indicator",
              "fullType": "keyapis.telemetry_control.v1.Indicator",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceListRequest",
          "longName": "GetDeviceListRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceListRequest",
          "description": "Запрос получения списка",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр",
              "label": "",
              "type": "DeviceFilter",
              "longType": "DeviceFilter",
              "fullType": "keyapis.telemetry_control.v1.DeviceFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация",
              "label": "",
              "type": "DevicePaging",
              "longType": "DevicePaging",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceListResponse",
          "longName": "GetDeviceListResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceListResponse",
          "description": "Ответ на запрос получения списка приборов учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Прибор учета",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetDeviceListResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.GetDeviceListResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetDeviceListResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceListResponse.Error",
          "description": "Ошибка запроса получения списка приборов учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "device_filter_validation",
              "description": "Ошибка фильтрации",
              "label": "",
              "type": "ValidationError",
              "longType": "DeviceFilter.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.DeviceFilter.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "device_paging_validation",
              "description": "Ошибка пагинации  по страницам",
              "label": "",
              "type": "ValidationError",
              "longType": "DevicePaging.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.DevicePaging.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetDeviceRequest",
          "longName": "GetDeviceRequest",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceRequest",
          "description": "Запрос получения ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор ПУ",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "GetDeviceResponse",
          "longName": "GetDeviceResponse",
          "fullName": "keyapis.telemetry_control.v1.GetDeviceResponse",
          "description": "Ответ на запрос получения ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Прибор учета",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "Indicator",
          "longName": "Indicator",
          "fullName": "keyapis.telemetry_control.v1.Indicator",
          "description": "Индикатор",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "device_id",
              "description": "Идентификатор прибора учета(ПУ)",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "title",
              "description": "Название",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 3
            },
            {
              "name": "unit_type",
              "description": "Тип единицы измерения, в которой интерпретировано, получаемое измерение",
              "label": "",
              "type": "UnitType",
              "longType": "Indicator.UnitType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.UnitType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 4
            },
            {
              "name": "sign_type",
              "description": "Тип измерения",
              "label": "",
              "type": "SignType",
              "longType": "Indicator.SignType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.SignType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 5
            },
            {
              "name": "created_at",
              "description": "Дата создания",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 6
            },
            {
              "name": "changed_at",
              "description": "Дата последнего изменения.\nЗаполняется и обновляется сервером.\nЗаполняется при создании и изменении.\nЯвляется версией объекта",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 7
            },
            {
              "name": "is_individual",
              "description": "Флаг видимости индикатора для клиента",
              "label": "",
              "type": "bool",
              "longType": "bool",
              "fullType": "bool",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 8
            },
            {
              "name": "compatibility_code",
              "description": "Код для совместимости с поставщиком метрик",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 9
            },
            {
              "name": "archive_type",
              "description": "Тип архивности показаний",
              "label": "",
              "type": "ArchiveType",
              "longType": "Indicator.ArchiveType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.ArchiveType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 10
            },
            {
              "name": "presentation_unit_type",
              "description": "Тип единицы измерения для отображения измерения.\nПри UNIT_TYPE_UNKNOWN отображаемые единицы совпадают с единицами источников значений, преобразования единиц не происходит.\nПрименяется после коэффициента",
              "label": "",
              "type": "UnitType",
              "longType": "Indicator.UnitType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.UnitType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 11
            },
            {
              "name": "coefficient",
              "description": "Коэффициент, на который умножается отображаемое значение.\nПрименяется перед преобразованием единиц измерений к presentation_unit_type и после применения поправки",
              "label": "",
              "type": "FloatValue",
              "longType": "google.protobuf.FloatValue",
              "fullType": "google.protobuf.FloatValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 12
            },
            {
              "name": "shift",
              "description": "Величина поправки к отображаемому значению.\nПрименяется перед применением коэффициента",
              "label": "",
              "type": "FloatValue",
              "longType": "google.protobuf.FloatValue",
              "fullType": "google.protobuf.FloatValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 13
            },
            {
              "name": "round_decimal_digits",
              "description": "Количество возвращаемых десятичных знаков при округлении итогового значения.\nПри пустом параметре округления не происходит.\nПрименяется после преобразования единиц измерения",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 14
            },
            {
              "name": "metric_expected_freq",
              "description": "Ожидаемая частота поступления показаний в днях",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 15
            },
            {
              "name": "channel_number",
              "description": "Номер канала для многоканального ПУ",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 16
            },
            {
              "name": "channel_order",
              "description": "Порядковый номер канала для многоканального ПУ",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 17
            },
            {
              "name": "vendor_type",
              "description": "Посредник получения показаний",
              "label": "",
              "type": "VendorType",
              "longType": "Indicator.VendorType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.VendorType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 18
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "Indicator.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.Indicator.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования protobuf",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "message",
              "description": "Валидационное сообщение",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "IndicatorFilter",
          "longName": "IndicatorFilter",
          "fullName": "keyapis.telemetry_control.v1.IndicatorFilter",
          "description": "Фильтр для запроса индикаторов.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device_ids",
              "description": "По списку приборов учета",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "sign_types",
              "description": "По типам измерений",
              "label": "repeated",
              "type": "SignType",
              "longType": "Indicator.SignType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.SignType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "ids",
              "description": "По списку ключей индикаторов.\nУстарело, использовать метод GetDeviceIndicator",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "deprecated": true
              },
              "number": 3
            },
            {
              "name": "device_serial_numbers",
              "description": "По серийным номерам привязанных ПУ",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "building_ids",
              "description": "По идентификаторам объектов строительства, привязанных ТУ",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "room_numbers",
              "description": "По Номерам помещений, привязанных ТУ",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "room_labels",
              "description": "По Лейблам помещений, привязанных ТУ",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 7
            },
            {
              "name": "metric_point_ids",
              "description": "По ID привязанных точек учета",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 8
            },
            {
              "name": "indicator_vendor_types",
              "description": "По посреднику получения показаний",
              "label": "repeated",
              "type": "VendorType",
              "longType": "Indicator.VendorType",
              "fullType": "keyapis.telemetry_control.v1.Indicator.VendorType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 9
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "IndicatorFilter.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.IndicatorFilter.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования protobuf",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "message",
              "description": "Валидационное сообщение",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "IndicatorPaging",
          "longName": "IndicatorPaging",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging",
          "description": "Пагинация индикаторов",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nПо умолчанию: ID",
              "label": "",
              "type": "OrderByType",
              "longType": "IndicatorPaging.OrderByType",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\nПо умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "IndicatorPaging.DirectionType",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nМинимальное значение: 1.\nМаксимальное значение: 100.\nПо умолчанию: 20.\nЕсли значение 0 (не передано), то выставляем значение по умолчанию",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\nПо умолчанию: 0",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "IndicatorPaging.ValidationError",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError",
          "description": "Ошибка валидации постраничной пагинации по индикаторам.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "limit",
              "description": "Количество передано некорректно",
              "label": "",
              "type": "LimitInvalid",
              "longType": "IndicatorPaging.ValidationError.LimitInvalid",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError.LimitInvalid",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "offset",
              "description": "Сдвиг передан некорректно",
              "label": "",
              "type": "OffsetInvalid",
              "longType": "IndicatorPaging.ValidationError.OffsetInvalid",
              "fullType": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError.OffsetInvalid",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "LimitInvalid",
          "longName": "IndicatorPaging.ValidationError.LimitInvalid",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError.LimitInvalid",
          "description": "Причины:\n- Значение количества \u003c 0 или \u003e 100",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "OffsetInvalid",
          "longName": "IndicatorPaging.ValidationError.OffsetInvalid",
          "fullName": "keyapis.telemetry_control.v1.IndicatorPaging.ValidationError.OffsetInvalid",
          "description": "Причины:\n- Значение сдвига \u003c 0",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PostDeviceFullDuplexRequest",
          "longName": "PostDeviceFullDuplexRequest",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest",
          "description": "Запрос создания задачи с клиента на сервере",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "request_id",
              "description": "Идентификатор запроса",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "post_device_full_duplex_device_async_status",
              "description": "Результат обработки устройства на клиенте",
              "label": "",
              "type": "DeviceAsyncStatus",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "task",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "DeviceAsyncStatus",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus",
          "description": "Результат обработки устройства на клиенте",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "device_id",
              "description": "Идентификатор ПУ",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "data",
              "description": "Успех",
              "label": "",
              "type": "Success",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Success",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Success",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 3
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error",
          "description": "Ошибки обработки устройства на клиенте",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "post_device_request_unknown",
              "description": "Неизвестная ошибка",
              "label": "",
              "type": "UnknownError",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.UnknownError",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.UnknownError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "post_device_request_ip",
              "description": "Неверный IP",
              "label": "",
              "type": "IpError",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.IpError",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.IpError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "post_device_request_port",
              "description": "Неверный порт",
              "label": "",
              "type": "PortError",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.PortError",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.PortError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "post_device_request_network_address",
              "description": "Неверный сетевой адрес",
              "label": "",
              "type": "NetworkAddressError",
              "longType": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.NetworkAddressError",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.NetworkAddressError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "IpError",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.IpError",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.IpError",
          "description": "Причины:\n - Устройство не найденно на данном IP адресе",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "NetworkAddressError",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.NetworkAddressError",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.NetworkAddressError",
          "description": "Причины:\n - Неверный сетевой адрес",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PortError",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.PortError",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.PortError",
          "description": "Причины:\n - Устройство отсутствует на порту",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "UnknownError",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.UnknownError",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Error.UnknownError",
          "description": "Неизвестная ошибка на стороне клиента",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "message",
              "description": "Произвольный текст ошибки на стороне клиента.\nОтправляется в случае если в спецификации нет подходящей ошибки.\nПосле анализа таких ошибок в спецификацию добавляется специальный тип под эту ошибку",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "Success",
          "longName": "PostDeviceFullDuplexRequest.DeviceAsyncStatus.Success",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest.DeviceAsyncStatus.Success",
          "description": "Команда принята",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PostDeviceFullDuplexResponse",
          "longName": "PostDeviceFullDuplexResponse",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceFullDuplexResponse",
          "description": "Событие изменения ПУ на сервера",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "request_id",
              "description": "Идентификатор запроса",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "post_device",
              "description": "Измененние ПУ на сервере",
              "label": "",
              "type": "PostDeviceResponse",
              "longType": "PostDeviceResponse",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceResponse",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "event",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "PostDeviceIndicatorRequest",
          "longName": "PostDeviceIndicatorRequest",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceIndicatorRequest",
          "description": "Запрос сохранения индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Индикатор",
              "label": "",
              "type": "Indicator",
              "longType": "Indicator",
              "fullType": "keyapis.telemetry_control.v1.Indicator",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PostDeviceIndicatorResponse",
          "longName": "PostDeviceIndicatorResponse",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceIndicatorResponse",
          "description": "Ответ на запрос сохранения индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Индикатор",
              "label": "",
              "type": "Indicator",
              "longType": "Indicator",
              "fullType": "keyapis.telemetry_control.v1.Indicator",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostDeviceIndicatorResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceIndicatorResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostDeviceIndicatorResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceIndicatorResponse.Error",
          "description": "Ошибка запроса сохранения индикатора",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "Indicator.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.Indicator.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PostDeviceReplaceRequest",
          "longName": "PostDeviceReplaceRequest",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceRequest",
          "description": "Запрос замены прибора учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "replace_device_id",
              "description": "Идентификатор заменяемого прибора учета",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "device",
              "description": "Создаваемый прибор учета",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "PostDeviceReplaceResponse",
          "longName": "PostDeviceReplaceResponse",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse",
          "description": "Ответ на замену прибора учета",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Созданный на замену ПУ",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostDeviceReplaceResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostDeviceReplaceResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error",
          "description": "Ошибка замены ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "Device.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.Device.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "replace_device_not_found",
              "description": "Не найден заменяемый ПУ",
              "label": "",
              "type": "ReplaceDeviceNotFound",
              "longType": "PostDeviceReplaceResponse.Error.ReplaceDeviceNotFound",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.ReplaceDeviceNotFound",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "create_indicators_fail",
              "description": "Не удалось создать индикаторы нового ПУ",
              "label": "",
              "type": "CreateIndicatorsFail",
              "longType": "PostDeviceReplaceResponse.Error.CreateIndicatorsFail",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.CreateIndicatorsFail",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "multi_linked_metric_point",
              "description": "Попытка замены ПУ, привязанного ко многим ТУ",
              "label": "",
              "type": "MultiLinkedMetricPoint",
              "longType": "PostDeviceReplaceResponse.Error.MultiLinkedMetricPoint",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.MultiLinkedMetricPoint",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "wrong_building",
              "description": "Заменяющий ПУ не привязан к дому заменяемого ПУ",
              "label": "",
              "type": "WrongBuilding",
              "longType": "PostDeviceReplaceResponse.Error.WrongBuilding",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.WrongBuilding",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "metric_point_not_found",
              "description": "Заменяемый ПУ не привязан к ТУ",
              "label": "",
              "type": "MetricPointNotFound",
              "longType": "PostDeviceReplaceResponse.Error.MetricPointNotFound",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.MetricPointNotFound",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 6
            }
          ]
        },
        {
          "name": "CreateIndicatorsFail",
          "longName": "PostDeviceReplaceResponse.Error.CreateIndicatorsFail",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.CreateIndicatorsFail",
          "description": "Не удалось создать индикаторы нового ПУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "MetricPointNotFound",
          "longName": "PostDeviceReplaceResponse.Error.MetricPointNotFound",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.MetricPointNotFound",
          "description": "Заменяемый ПУ не привязан к ТУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "MultiLinkedMetricPoint",
          "longName": "PostDeviceReplaceResponse.Error.MultiLinkedMetricPoint",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.MultiLinkedMetricPoint",
          "description": "Попытка замены ПУ, привязанного ко многим ТУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "ReplaceDeviceNotFound",
          "longName": "PostDeviceReplaceResponse.Error.ReplaceDeviceNotFound",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.ReplaceDeviceNotFound",
          "description": "Не найден заменяемый ПУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "WrongBuilding",
          "longName": "PostDeviceReplaceResponse.Error.WrongBuilding",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse.Error.WrongBuilding",
          "description": "Заменяющий ПУ не привязан к дому заменяемого ПУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PostDeviceRequest",
          "longName": "PostDeviceRequest",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceRequest",
          "description": "Запрос сохранения ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device",
              "description": "Прибор учета",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PostDeviceResponse",
          "longName": "PostDeviceResponse",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceResponse",
          "description": "Ответ на изменение ПУ на сервере",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "ПУ",
              "label": "",
              "type": "Device",
              "longType": "Device",
              "fullType": "keyapis.telemetry_control.v1.Device",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostDeviceResponse.Error",
              "fullType": "keyapis.telemetry_control.v1.PostDeviceResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostDeviceResponse.Error",
          "fullName": "keyapis.telemetry_control.v1.PostDeviceResponse.Error",
          "description": "Ошибка запроса сохранения ПУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "Device.ValidationError",
              "fullType": "keyapis.telemetry_control.v1.Device.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PutDeviceGroupAttachRequest",
          "longName": "PutDeviceGroupAttachRequest",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceGroupAttachRequest",
          "description": "Запрос сохранения связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device_group",
              "description": "Связь ПУ и группы пользователя",
              "label": "",
              "type": "DeviceGroup",
              "longType": "DeviceGroup",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroup",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutDeviceGroupAttachResponse",
          "longName": "PutDeviceGroupAttachResponse",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceGroupAttachResponse",
          "description": "Ответ на запрос сохранения связи ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PutDeviceGroupDetachRequest",
          "longName": "PutDeviceGroupDetachRequest",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceGroupDetachRequest",
          "description": "Запрос удаления связей ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device_group",
              "description": "Связь ПУ и группы пользователя",
              "label": "",
              "type": "DeviceGroup",
              "longType": "DeviceGroup",
              "fullType": "keyapis.telemetry_control.v1.DeviceGroup",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutDeviceGroupDetachResponse",
          "longName": "PutDeviceGroupDetachResponse",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceGroupDetachResponse",
          "description": "Ответ на запрос удаления связи ПУ и группы пользователя",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PutDeviceIndicatorMetricPointAttachRequest",
          "longName": "PutDeviceIndicatorMetricPointAttachRequest",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointAttachRequest",
          "description": "Запрос сохранения связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device_indicator_metric_point",
              "description": "Связь индикатора и ТУ",
              "label": "",
              "type": "DeviceIndicatorMetricPoint",
              "longType": "DeviceIndicatorMetricPoint",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPoint",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutDeviceIndicatorMetricPointAttachResponse",
          "longName": "PutDeviceIndicatorMetricPointAttachResponse",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointAttachResponse",
          "description": "Ответ на запрос сохранения связи индикатора и ТУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PutDeviceIndicatorMetricPointDetachRequest",
          "longName": "PutDeviceIndicatorMetricPointDetachRequest",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointDetachRequest",
          "description": "Запрос удаления связей индикаторов и ТУ",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "device_indicator_metric_point",
              "description": "Связь индикатора и ТУ",
              "label": "",
              "type": "DeviceIndicatorMetricPoint",
              "longType": "DeviceIndicatorMetricPoint",
              "fullType": "keyapis.telemetry_control.v1.DeviceIndicatorMetricPoint",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutDeviceIndicatorMetricPointDetachResponse",
          "longName": "PutDeviceIndicatorMetricPointDetachResponse",
          "fullName": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointDetachResponse",
          "description": "Ответ на запрос удаления связи индикатора и ТУ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        }
      ],
      "services": [
        {
          "name": "DeviceService",
          "longName": "DeviceService",
          "fullName": "keyapis.telemetry_control.v1.DeviceService",
          "description": "Сервис приборов учёта (ПУ).\nАвторизация:\n  - Authorization: Bearer token.\n  - X-Api-Key: apiKey",
          "methods": [
            {
              "name": "PostDeviceFullDuplex",
              "description": "Полнодуплексный метод отправки команд на сервер и получения изменения со стороны сервера.\nРазрешения: telemetry_control:device:list, telemetry_control:device:list:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.\nМетод доступен для: ApiKey: Без учета разрешений",
              "requestType": "PostDeviceFullDuplexRequest",
              "requestLongType": "PostDeviceFullDuplexRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexRequest",
              "requestStreaming": true,
              "responseType": "PostDeviceFullDuplexResponse",
              "responseLongType": "PostDeviceFullDuplexResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PostDeviceFullDuplexResponse",
              "responseStreaming": true
            },
            {
              "name": "GetDevice",
              "description": "Метод получения ПУ.\nРазрешения: telemetry_control:device:card, telemetry_control:device:card:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.\nМетод доступен для: ApiKey: При наличии разрешений",
              "requestType": "GetDeviceRequest",
              "requestLongType": "GetDeviceRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceResponse",
              "responseLongType": "GetDeviceResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceList",
              "description": "Метод получения списка приборов учета.\nРазрешения: telemetry_control:device:list, telemetry_control:device:list:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.\nМетод доступен для: ApiKey: При наличии разрешений",
              "requestType": "GetDeviceListRequest",
              "requestLongType": "GetDeviceListRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceListRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceListResponse",
              "responseLongType": "GetDeviceListResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceCount",
              "description": "Метод получения количества приборов учета.\nРазрешения: telemetry_control:device:list, telemetry_control:device:list:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.\nМетод доступен для: ApiKey: При наличии разрешений",
              "requestType": "GetDeviceCountRequest",
              "requestLongType": "GetDeviceCountRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceCountRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceCountResponse",
              "responseLongType": "GetDeviceCountResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostDeviceReplace",
              "description": "Метод замены прибора учета.\nСоздает ПУ и привязывает его индикаторы к ТУ исходного ПУ.\nРазрешения: telemetry_control:device:save, telemetry_control:device:save:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений",
              "requestType": "PostDeviceReplaceRequest",
              "requestLongType": "PostDeviceReplaceRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PostDeviceReplaceRequest",
              "requestStreaming": false,
              "responseType": "PostDeviceReplaceResponse",
              "responseLongType": "PostDeviceReplaceResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PostDeviceReplaceResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/telemetry_control/api/v1/device/replace",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostDevice",
              "description": "Метод сохранения прибора учета.\nПоддерживает создание и обновление.\nРазрешения: telemetry_control:device:save, telemetry_control:device:save:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений",
              "requestType": "PostDeviceRequest",
              "requestLongType": "PostDeviceRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PostDeviceRequest",
              "requestStreaming": false,
              "responseType": "PostDeviceResponse",
              "responseLongType": "PostDeviceResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PostDeviceResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/telemetry_control/api/v1/device",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "DeleteDevice",
              "description": "Метод удаления прибора учета.\nРазрешения: telemetry_control:device:remove, telemetry_control:device:remove:own.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений",
              "requestType": "DeleteDeviceRequest",
              "requestLongType": "DeleteDeviceRequest",
              "requestFullType": "keyapis.telemetry_control.v1.DeleteDeviceRequest",
              "requestStreaming": false,
              "responseType": "DeleteDeviceResponse",
              "responseLongType": "DeleteDeviceResponse",
              "responseFullType": "keyapis.telemetry_control.v1.DeleteDeviceResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "DELETE",
                      "pattern": "/telemetry_control/api/v1/device/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostDeviceIndicator",
              "description": "Метод сохранения индикатора.\nПоддерживает создание и обновление.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "PostDeviceIndicatorRequest",
              "requestLongType": "PostDeviceIndicatorRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PostDeviceIndicatorRequest",
              "requestStreaming": false,
              "responseType": "PostDeviceIndicatorResponse",
              "responseLongType": "PostDeviceIndicatorResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PostDeviceIndicatorResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/telemetry_control/api/v1/device/indicator",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceIndicator",
              "description": "Метод получения индикатора.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "GetDeviceIndicatorRequest",
              "requestLongType": "GetDeviceIndicatorRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceIndicatorResponse",
              "responseLongType": "GetDeviceIndicatorResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/indicator/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceIndicatorList",
              "description": "Метод получения списка индикаторов.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "GetDeviceIndicatorListRequest",
              "requestLongType": "GetDeviceIndicatorListRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorListRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceIndicatorListResponse",
              "responseLongType": "GetDeviceIndicatorListResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/indicator/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceIndicatorCount",
              "description": "Метод получения количества индикаторов.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "GetDeviceIndicatorCountRequest",
              "requestLongType": "GetDeviceIndicatorCountRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceIndicatorCountResponse",
              "responseLongType": "GetDeviceIndicatorCountResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/indicator/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "DeleteDeviceIndicator",
              "description": "Метод удаления индикаторa.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "DeleteDeviceIndicatorRequest",
              "requestLongType": "DeleteDeviceIndicatorRequest",
              "requestFullType": "keyapis.telemetry_control.v1.DeleteDeviceIndicatorRequest",
              "requestStreaming": false,
              "responseType": "DeleteDeviceIndicatorResponse",
              "responseLongType": "DeleteDeviceIndicatorResponse",
              "responseFullType": "keyapis.telemetry_control.v1.DeleteDeviceIndicatorResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "DELETE",
                      "pattern": "/telemetry_control/api/v1/device/indicator/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceIndicatorMetricPointList",
              "description": "Метод получения списка связей индикаторов и ТУ.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "GetDeviceIndicatorMetricPointListRequest",
              "requestLongType": "GetDeviceIndicatorMetricPointListRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointListRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceIndicatorMetricPointListResponse",
              "responseLongType": "GetDeviceIndicatorMetricPointListResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/indicator/metric_point/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceIndicatorMetricPointCount",
              "description": "Метод получения количества связей индикаторов и ТУ.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "GetDeviceIndicatorMetricPointCountRequest",
              "requestLongType": "GetDeviceIndicatorMetricPointCountRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointCountRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceIndicatorMetricPointCountResponse",
              "responseLongType": "GetDeviceIndicatorMetricPointCountResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceIndicatorMetricPointCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/indicator/metric_point/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutDeviceIndicatorMetricPointAttach",
              "description": "Метод сохранения связи индикаторов и ТУ.\nПоддерживает только создание связи.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "PutDeviceIndicatorMetricPointAttachRequest",
              "requestLongType": "PutDeviceIndicatorMetricPointAttachRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointAttachRequest",
              "requestStreaming": false,
              "responseType": "PutDeviceIndicatorMetricPointAttachResponse",
              "responseLongType": "PutDeviceIndicatorMetricPointAttachResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointAttachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/telemetry_control/api/v1/device/indicator/{device_indicator_metric_point.indicator_id}/metric_point/{device_indicator_metric_point.metric_point_id}/attach"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutDeviceIndicatorMetricPointDetach",
              "description": "Метод удаления связи индикаторов и ТУ.\nМетод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений",
              "requestType": "PutDeviceIndicatorMetricPointDetachRequest",
              "requestLongType": "PutDeviceIndicatorMetricPointDetachRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointDetachRequest",
              "requestStreaming": false,
              "responseType": "PutDeviceIndicatorMetricPointDetachResponse",
              "responseLongType": "PutDeviceIndicatorMetricPointDetachResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PutDeviceIndicatorMetricPointDetachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/telemetry_control/api/v1/device/indicator/{device_indicator_metric_point.indicator_id}/metric_point/{device_indicator_metric_point.metric_point_id}/detach"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceGroupList",
              "description": "Метод получения списка связей ПУ и группы пользователя.\nМетод доступен для: Token: admin, service, bti, seller. Без учета разрешений",
              "requestType": "GetDeviceGroupListRequest",
              "requestLongType": "GetDeviceGroupListRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceGroupListRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceGroupListResponse",
              "responseLongType": "GetDeviceGroupListResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceGroupListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/group/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetDeviceGroupCount",
              "description": "Метод получения количества связей ПУ и группы пользователя.\nМетод доступен для: Token: admin, service, bti, seller. Без учета разрешений",
              "requestType": "GetDeviceGroupCountRequest",
              "requestLongType": "GetDeviceGroupCountRequest",
              "requestFullType": "keyapis.telemetry_control.v1.GetDeviceGroupCountRequest",
              "requestStreaming": false,
              "responseType": "GetDeviceGroupCountResponse",
              "responseLongType": "GetDeviceGroupCountResponse",
              "responseFullType": "keyapis.telemetry_control.v1.GetDeviceGroupCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/telemetry_control/api/v1/device/group/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutDeviceGroupAttach",
              "description": "Метод сохранения связей ПУ и группы пользователя.\nПоддерживает только создание.\nМетод доступен для: Token: admin, service, bti, seller. Без учета разрешений",
              "requestType": "PutDeviceGroupAttachRequest",
              "requestLongType": "PutDeviceGroupAttachRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PutDeviceGroupAttachRequest",
              "requestStreaming": false,
              "responseType": "PutDeviceGroupAttachResponse",
              "responseLongType": "PutDeviceGroupAttachResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PutDeviceGroupAttachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/telemetry_control/api/v1/device/{device_group.device_id}/group/{device_group.group_id}/attach"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutDeviceGroupDetach",
              "description": "Метод удаления связей ПУ и группы пользователя.\nМетод доступен для: Token: admin, service, bti, seller. Без учета разрешений",
              "requestType": "PutDeviceGroupDetachRequest",
              "requestLongType": "PutDeviceGroupDetachRequest",
              "requestFullType": "keyapis.telemetry_control.v1.PutDeviceGroupDetachRequest",
              "requestStreaming": false,
              "responseType": "PutDeviceGroupDetachResponse",
              "responseLongType": "PutDeviceGroupDetachResponse",
              "responseFullType": "keyapis.telemetry_control.v1.PutDeviceGroupDetachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/telemetry_control/api/v1/device/{device_group.device_id}/group/{device_group.group_id}/detach"
                    }
                  ]
                }
              }
            }
          ]
        }
      ],
      "syntax": "proto3"
    }
  ],
  "scalarValueTypes": [
    {
      "protoType": "double",
      "notes": "",
      "cppType": "double",
      "csType": "double",
      "goType": "float64",
      "javaType": "double",
      "phpType": "float",
      "pythonType": "float",
      "rubyType": "Float"
    },
    {
      "protoType": "float",
      "notes": "",
      "cppType": "float",
      "csType": "float",
      "goType": "float32",
      "javaType": "float",
      "phpType": "float",
      "pythonType": "float",
      "rubyType": "Float"
    },
    {
      "protoType": "int32",
      "notes": "Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "int64",
      "notes": "Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "uint32",
      "notes": "Uses variable-length encoding.",
      "cppType": "uint32",
      "csType": "uint",
      "goType": "uint32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int/long",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "uint64",
      "notes": "Uses variable-length encoding.",
      "cppType": "uint64",
      "csType": "ulong",
      "goType": "uint64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sint32",
      "notes": "Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sint64",
      "notes": "Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "fixed32",
      "notes": "Always four bytes. More efficient than uint32 if values are often greater than 2^28.",
      "cppType": "uint32",
      "csType": "uint",
      "goType": "uint32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "fixed64",
      "notes": "Always eight bytes. More efficient than uint64 if values are often greater than 2^56.",
      "cppType": "uint64",
      "csType": "ulong",
      "goType": "uint64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "sfixed32",
      "notes": "Always four bytes.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sfixed64",
      "notes": "Always eight bytes.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "bool",
      "notes": "",
      "cppType": "bool",
      "csType": "bool",
      "goType": "bool",
      "javaType": "boolean",
      "phpType": "boolean",
      "pythonType": "boolean",
      "rubyType": "TrueClass/FalseClass"
    },
    {
      "protoType": "string",
      "notes": "A string must always contain UTF-8 encoded or 7-bit ASCII text.",
      "cppType": "string",
      "csType": "string",
      "goType": "string",
      "javaType": "String",
      "phpType": "string",
      "pythonType": "str/unicode",
      "rubyType": "String (UTF-8)"
    },
    {
      "protoType": "bytes",
      "notes": "May contain any arbitrary sequence of bytes.",
      "cppType": "string",
      "csType": "ByteString",
      "goType": "[]byte",
      "javaType": "ByteString",
      "phpType": "string",
      "pythonType": "str",
      "rubyType": "String (ASCII-8BIT)"
    }
  ]
}