// Generated by the protocol buffer compiler.  DO NOT EDIT!
// clang-format off
// source: keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers.h>
#else
 #import "GPBProtocolBuffers.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30007 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

CF_EXTERN_C_BEGIN

@class KEYAPISTELEMETRYCONTROLV1Device;
@class KEYAPISTELEMETRYCONTROLV1DeviceFilter;
@class KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1DeviceGroup;
@class KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter;
@class KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging;
@class KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint;
@class KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter;
@class KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging;
@class KEYAPISTELEMETRYCONTROLV1DevicePaging;
@class KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_LimitInvalid;
@class KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_OffsetInvalid;
@class KEYAPISTELEMETRYCONTROLV1Device_MetricPoint;
@class KEYAPISTELEMETRYCONTROLV1Device_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1Indicator;
@class KEYAPISTELEMETRYCONTROLV1IndicatorFilter;
@class KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1IndicatorPaging;
@class KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_LimitInvalid;
@class KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_OffsetInvalid;
@class KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_IpError;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_NetworkAddressError;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_PortError;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Success;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_CreateIndicatorsFail;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MetricPointNotFound;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MultiLinkedMetricPoint;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_ReplaceDeviceNotFound;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_WrongBuilding;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceResponse;
@class KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error;

NS_ASSUME_NONNULL_BEGIN

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType

/** Справочник типов сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_OrderByTypeUnknown = 0,

  /** По Идентификатору группы пользователя */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_GroupId = 1,

  /** По ПУ */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_DeviceId = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType

/** Справочник типов направлений сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_DirectionTypeUnknown = 0,

  /** От большего к меньшему */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_Desc = 1,

  /** От меньшего к большему */
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_Asc = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType

/** Справочник типов сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_OrderByTypeUnknown = 0,

  /** По уникальному ключу */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_Id = 1,

  /** По типу измерений */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_SignType = 2,

  /** По Прибору учета */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_DeviceId = 3,

  /** По Дате создания */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_CreatedAt = 4,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType

/** Справочник типов направлений сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_DirectionTypeUnknown = 0,

  /** От большего к меньшему */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_Desc = 1,

  /** От меньшего к большему */
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_Asc = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Indicator_VendorType

/** Посредники получения показаний */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_VendorType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_VendorTypeUnknown = 0,

  /** Энвайро */
  KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_Enviro = 1,

  /** Лартех */
  KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_Lartech = 2,

  /** РТК */
  KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_Rtk = 3,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Indicator_UnitType

/** Справочник типов единиц измерений */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_UnitType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_UnitTypeUnknown = 0,

  /** Процент */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Percent = 1,

  /** Градус по Цельсию */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_C = 2,

  /** Ватт */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Wt = 3,

  /** Гигакалория */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Gkal = 4,

  /** Количество */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Value = 5,

  /** Киловaтт-час */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Kwh = 6,

  /** Килограмм на квадратный сантиметр */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_KgCm2 = 7,

  /** Килограмм-сила на квадратный сантиметр */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_KgfCm2 = 8,

  /** Кубический метр */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_M3 = 9,

  /** Кубический метр в час */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_M3H = 10,

  /** Мегапаскаль */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Mpa = 11,

  /** Миллисекунда */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Ms = 12,

  /** Флаг состояния */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Boolean = 13,

  /** Тонна */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_T = 14,

  /** Тонна в час */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_TH = 15,

  /** Час */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_H = 16,

  /** Безразмерная величина */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_NonMeasurable = 17,

  /** Импульс */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Imp = 18,

  /** Джоуль */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_J = 19,

  /** Килоджоуль */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Kj = 20,

  /** Гигаджоуль */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Gj = 21,

  /** Ватт-час */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Wth = 22,

  /** Киловатт */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Kwt = 23,

  /** Минута */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_Min = 24,

  /** Секунда */
  KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_S = 25,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Indicator_SignType

/** Справочник типов измерений */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_SignType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_SignTypeUnknown = 0,

  /** Абсолютный показатель */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_AbsoluteDs = 1,

  /** Абсолютный расход ресурса */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_AbsoluteRc = 2,

  /** Интервальный показатель состояния */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_IntervalDs = 3,

  /** Интервальный расход ресурса */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_IntervalRc = 4,

  /** Текущее состояние */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_CurrentDs = 5,

  /** Текущее состояние ресурса */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_CurrentRs = 6,

  /** Объём */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_Volume = 7,

  /** Параметр конфигурации */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_Parameter = 8,

  /** Флаг состояния */
  KEYAPISTELEMETRYCONTROLV1Indicator_SignType_Flag = 9,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Indicator_SignType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Indicator_SignType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType

/**
 * Справочник типа архивности показаний.
 * Используется для указания за какой период произошло измерение.
 * По умолчанию CURRENT
 **/
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_ArchiveTypeUnknown = 0,

  /** Текущие показания */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Current = 1,

  /** За 30 мин */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Halfhour = 2,

  /** За час */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Hour = 3,

  /** За сутки */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Day = 4,

  /** За месяц */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Month = 5,

  /** За год */
  KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_Year = 6,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType

/**
 * Справочник типов номинальных нагрузок вторичных обмоток.
 * У трансформаторов тока (В*А)
 **/
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_SecondaryCurrentTypeUnknown = 0,

  /** 1 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_Tt1A = 1,

  /** 2 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_Tt2A = 2,

  /** 5 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_Tt5A = 3,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_Type

/** Справочник типов приборов учёта(ПУ) */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_Type) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_Type_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_Type_TypeUnknown = 0,

  /** Коммуникационный модуль */
  KEYAPISTELEMETRYCONTROLV1Device_Type_Hub = 1,

  /** Счетчик импульсов - регистратор */
  KEYAPISTELEMETRYCONTROLV1Device_Type_PulseCounterRecorder = 2,

  /** Счетчик импульсов - регистратор LoRaWAN */
  KEYAPISTELEMETRYCONTROLV1Device_Type_PulseCounterRecorderLr = 3,

  /** Прибор учета расхода коммунальных услуг */
  KEYAPISTELEMETRYCONTROLV1Device_Type_MeteringDevice = 4,

  /** Конвертер интерфейсов */
  KEYAPISTELEMETRYCONTROLV1Device_Type_InterfaceConverter = 5,

  /** M-BUS концентратор */
  KEYAPISTELEMETRYCONTROLV1Device_Type_MBusHub = 6,

  /** Модуль связи LoRaWAN */
  KEYAPISTELEMETRYCONTROLV1Device_Type_CommunicationModuleLr = 7,

  /** Базовая станция LoRaWAN */
  KEYAPISTELEMETRYCONTROLV1Device_Type_BaseLr = 8,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_Type_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_Type_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_StatusType

/** Справочник типов статусов */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_StatusType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_StatusTypeUnknown = 0,

  /** Получен клиентом, еще не сконфигурирован */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Received = 1,

  /** Сконфигурирован клиентом, активен */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Active = 2,

  /** Обработан клиентом, возникла ошибка */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Wrong = 3,

  /** Переведен в архивный статус */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Archive = 4,

  /** Удален */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Delete = 5,

  /** Отсоединен */
  KEYAPISTELEMETRYCONTROLV1Device_StatusType_Unlink = 6,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_StatusType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_StatusType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_PlanType

/** Справочник типов тарифных планов */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_PlanType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_PlanType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_PlanType_PlanTypeUnknown = 0,

  /** Однотарифный */
  KEYAPISTELEMETRYCONTROLV1Device_PlanType_Single = 1,

  /** Двухтарифный */
  KEYAPISTELEMETRYCONTROLV1Device_PlanType_Double = 2,

  /** Трёхтарифный */
  KEYAPISTELEMETRYCONTROLV1Device_PlanType_Triple = 3,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_PlanType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_PlanType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_PipeType

/** Справочник типов трубопроводов */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_PipeType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_PipeType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_PipeType_PipeTypeUnknown = 0,

  /** Подающий */
  KEYAPISTELEMETRYCONTROLV1Device_PipeType_Infeed = 1,

  /** Циркуляционный */
  KEYAPISTELEMETRYCONTROLV1Device_PipeType_Circulating = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_PipeType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_PipeType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType

/** Справочние типов энергоресурсов */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_MetricTypeUnknown = 0,

  /** Горячая вода */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_HotWater = 1,

  /** Холодная вода */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_ColdWater = 2,

  /** Теплоэнергия */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_Heat = 3,

  /** Газ */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_Gas = 4,

  /** Электроэнергия */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_Electricity = 5,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType

/** Справочник типов статусов */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_StatusTypeUnknown = 0,

  /** Активная */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_Active = 1,

  /** Не активная */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_Wrong GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.MetricPoint.WRONG is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).") = 2,

  /** Архивная */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_Archive = 3,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType

/** Справочник типов учёта */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_AccountingTypeUnknown = 0,

  /** Коммерческий учёт */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_Commercial = 1,

  /** Технический учёт */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_Technical = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType

/**
 * Справочник типов номиналов первичных токов.
 * У выпускаемых трансформаторов тока (А)
 **/
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_PrimaryCurrentTypeUnknown = 0,

  /** 1 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt1A = 1,

  /** 5 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt5A = 2,

  /** 10 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt10A = 3,

  /** 15 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt15A = 4,

  /** 20 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt20A = 5,

  /** 30 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt30A = 6,

  /** 40 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt40A = 7,

  /** 50 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt50A = 8,

  /** 75 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt75A = 9,

  /** 80 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt80A = 10,

  /** 100 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt100A = 11,

  /** 150 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt150A = 12,

  /** 200 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt200A = 13,

  /** 300 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt300A = 14,

  /** 400 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt400A = 15,

  /** 500 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt500A = 16,

  /** 600 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt600A = 17,

  /** 750 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt750A = 18,

  /** 800 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt800A = 19,

  /** 1000 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt1000A = 20,

  /** 1200 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt1200A = 21,

  /** 1500 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt1500A = 22,

  /** 2000 (А) */
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_Tt2000A = 23,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType

/** Справочник типов значений сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_OrderByTypeUnknown = 0,

  /** По идентификатору */
  KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_Id = 1,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType

/** Справочник типов направлений сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_DirectionTypeUnknown = 0,

  /** От большего к меньшему */
  KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_Desc = 1,

  /** От меньшего к большему */
  KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_Asc = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType

/** Справочник типов сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_OrderByTypeUnknown = 0,

  /** По Идентификатору индикатора */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_IndicatorId = 1,

  /** По По Идентификатору ТУ */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_MetricPointId = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_IsValidValue(int32_t value);

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType

/** Справочник типов направлений сортировки */
typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType) {
  /**
   * Value used if any message's field encounters a value that is not defined
   * by this enum. The message will also have C functions to get/set the rawValue
   * of the field.
   **/
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
  /** Значение не указано */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_DirectionTypeUnknown = 0,

  /** От большего к меньшему */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_Desc = 1,

  /** От меньшего к большему */
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_Asc = 2,
};

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_EnumDescriptor(void);

/**
 * Checks to see if the given value is defined by the enum or was not known at
 * the time this source was generated.
 **/
BOOL KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_IsValidValue(int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlDeviceV1Root

/**
 * Exposes the extension registry for this file.
 *
 * The base class provides:
 * @code
 *   + (GPBExtensionRegistry *)extensionRegistry;
 * @endcode
 * which is a @c GPBExtensionRegistry that includes all the extensions defined by
 * this file and all files that it depends on.
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlDeviceV1Root : GPBRootObject
@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteDeviceRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeleteDeviceRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeleteDeviceRequest_FieldNumber_Id_p = 1,
};

/**
 * Запрос удаления прибора учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeleteDeviceRequest : GPBMessage

/** Идентификатор */
@property(nonatomic, readwrite) int32_t id_p;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteDeviceResponse

/**
 * Ответ на запрос удаления прибора учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeleteDeviceResponse : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachRequest_FieldNumber_DeviceGroup = 1,
};

/**
 * Запрос сохранения связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachRequest : GPBMessage

/** Связь ПУ и группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroup *deviceGroup;
/** Test to see if @c deviceGroup has been set. */
@property(nonatomic, readwrite) BOOL hasDeviceGroup;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachResponse

/**
 * Ответ на запрос сохранения связи ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceGroupAttachResponse : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_FieldNumber_Filter = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_FieldNumber_Paging = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_Pagination_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_Pagination_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_Pagination_OneOfCase_Paging = 2,
};

/**
 * Запрос получения списка
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest : GPBMessage

/** Фильтр связей ПУ и группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

/** Вариант разбиения на страницы */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_Pagination_OneOfCase paginationOneOfCase;

/** Пагинация */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging *paging;

@end

/**
 * Clears whatever value was set for the oneof 'pagination'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListRequest *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_FieldNumber_OrderByType = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_FieldNumber_DirectionType = 2,
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_FieldNumber_Limit = 3,
  KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_FieldNumber_Offset = 4,
};

/**
 * Пагинация связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging : GPBMessage

/**
 * Тип значения сортировки.
 * По умолчанию: GROUP_ID
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType orderByType;

/**
 * Тип направления сортировки.
 * По умолчанию: DESC
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType directionType;

/**
 * Количество записей на страницу.
 * Минимальное значение: 1.
 * Максимальное значение: 100.
 * По умолчанию: 20.
 * Если значение 0 (не передано), то выставляем значение по умолчанию
 **/
@property(nonatomic, readwrite) int32_t limit;

/**
 * Сдвиг.
 * По умолчанию: 0
 **/
@property(nonatomic, readwrite) int32_t offset;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging's @c orderByType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging's @c orderByType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging's @c directionType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging's @c directionType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DeviceGroupPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceGroupPaging *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения списка связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_Type_OneOfCase typeOneOfCase;

/** Связь ПУ и группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroup *data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupListResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountRequest_FieldNumber_Filter = 1,
};

/**
 * Запрос получения количества связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountRequest : GPBMessage

/** Фильтр связей ПУ и группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter_FieldNumber_GroupIdsArray = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter_FieldNumber_DeviceIdsArray = 2,
};

/**
 * Фильтр для запроса связей ПУ и группы пользователя.
 * При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
 * При передаче нескольких разных параметров фильтра они работают в выборке через И
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceGroupFilter : GPBMessage

/** По Идентификатору группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *groupIdsArray;
/** The number of items in @c groupIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger groupIdsArray_Count;

/** По ПУ */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *deviceIdsArray;
/** The number of items in @c deviceIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger deviceIdsArray_Count;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения количества связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_Type_OneOfCase typeOneOfCase;

/** Всего связей ПУ и группы пользователя */
@property(nonatomic, readwrite) int32_t data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceGroupCountResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachRequest_FieldNumber_DeviceGroup = 1,
};

/**
 * Запрос удаления связей ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachRequest : GPBMessage

/** Связь ПУ и группы пользователя */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceGroup *deviceGroup;
/** Test to see if @c deviceGroup has been set. */
@property(nonatomic, readwrite) BOOL hasDeviceGroup;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachResponse

/**
 * Ответ на запрос удаления связи ПУ и группы пользователя
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceGroupDetachResponse : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceGroup

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceGroup_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceGroup_FieldNumber_GroupId = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceGroup_FieldNumber_DeviceId = 2,
};

/**
 * Связка ПУ и группы пользователя.
 * Задает область ресурсов (resource scope), доступную пользователю.
 * Используется для контроля доступа к ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceGroup : GPBMessage

/**
 * Идентификатор группы.
 * # Тип: Guid
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *groupId;

/**
 * Идентификатор ПУ.
 * # Диапазон: 0..2147483647
 **/
@property(nonatomic, readwrite) int32_t deviceId;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorRequest_FieldNumber_Data_p = 1,
};

/**
 * Запрос сохранения индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorRequest : GPBMessage

/** Индикатор */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Indicator *data_p;
/** Test to see if @c data_p has been set. */
@property(nonatomic, readwrite) BOOL hasData_p;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на запрос сохранения индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Type_OneOfCase typeOneOfCase;

/** Индикатор */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Indicator *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_FieldNumber_Validation = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_Reason_OneOfCase_Validation = 1,
};

/**
 * Ошибка запроса сохранения индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка валидации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError *validation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceIndicatorResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorRequest_FieldNumber_Id_p = 1,
};

/**
 * Запрос получения индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorRequest : GPBMessage

/** Идентификатор индикатора */
@property(nonatomic, readwrite) int32_t id_p;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_Type_OneOfCase typeOneOfCase;

/** Индикатор */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Indicator *data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceRequest_FieldNumber_Id_p = 1,
};

/**
 * Запрос получения ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceRequest : GPBMessage

/** Идентификатор ПУ */
@property(nonatomic, readwrite) int32_t id_p;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_Type_OneOfCase typeOneOfCase;

/** Прибор учета */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_FieldNumber_Filter = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_FieldNumber_Paging = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_Pagination_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_Pagination_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_Pagination_OneOfCase_Paging = 2,
};

/**
 * Запрос получения списка
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest : GPBMessage

/** Фильтр индикаторов */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

/** Вариант разбиения на страницы */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_Pagination_OneOfCase paginationOneOfCase;

/** Пагинация по индикаторам */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorPaging *paging;

@end

/**
 * Clears whatever value was set for the oneof 'pagination'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListRequest *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorPaging

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_FieldNumber_OrderByType = 1,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_FieldNumber_DirectionType = 2,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_FieldNumber_Limit = 3,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_FieldNumber_Offset = 4,
};

/**
 * Пагинация индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorPaging : GPBMessage

/**
 * Тип значения сортировки.
 * По умолчанию: ID
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType orderByType;

/**
 * Тип направления сортировки.
 * По умолчанию: DESC
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType directionType;

/**
 * Количество записей на страницу.
 * Минимальное значение: 1.
 * Максимальное значение: 100.
 * По умолчанию: 20.
 * Если значение 0 (не передано), то выставляем значение по умолчанию
 **/
@property(nonatomic, readwrite) int32_t limit;

/**
 * Сдвиг.
 * По умолчанию: 0
 **/
@property(nonatomic, readwrite) int32_t offset;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1IndicatorPaging's @c orderByType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1IndicatorPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1IndicatorPaging's @c orderByType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1IndicatorPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1IndicatorPaging *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1IndicatorPaging's @c directionType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1IndicatorPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1IndicatorPaging's @c directionType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1IndicatorPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1IndicatorPaging *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_FieldNumber_Limit = 1,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_FieldNumber_Offset = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_Reason_OneOfCase_Limit = 1,
  KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_Reason_OneOfCase_Offset = 2,
};

/**
 * Ошибка валидации постраничной пагинации по индикаторам.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_Reason_OneOfCase reasonOneOfCase;

/** Количество передано некорректно */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_LimitInvalid *limit;

/** Сдвиг передан некорректно */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_OffsetInvalid *offset;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_LimitInvalid

/**
 * Причины:
 * - Значение количества < 0 или > 100
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_LimitInvalid : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_OffsetInvalid

/**
 * Причины:
 * - Значение сдвига < 0
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError_OffsetInvalid : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на запрос получения списка индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Type_OneOfCase typeOneOfCase;

/** Индикатор */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Indicator *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_FieldNumber_DeviceFilterValidation = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_FieldNumber_DevicePagingValidation = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_Reason_OneOfCase_DeviceFilterValidation = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_Reason_OneOfCase_DevicePagingValidation = 2,
};

/**
 * Ошибка запроса получения списка индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка фильтрации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError *deviceFilterValidation;

/** Ошибка пагинации  по страницам */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorPaging_ValidationError *devicePagingValidation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorListResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorFilter

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_DeviceIdsArray = 1,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_SignTypesArray = 2,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_IdsArray = 3,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_DeviceSerialNumbersArray = 4,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_BuildingIdsArray = 5,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_RoomNumbersArray = 6,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_RoomLabelsArray = 7,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_MetricPointIdsArray = 8,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_FieldNumber_IndicatorVendorTypesArray = 9,
};

/**
 * Фильтр для запроса индикаторов.
 * При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
 * При передаче нескольких разных параметров фильтра они работают в выборке через И
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorFilter : GPBMessage

/** По списку приборов учета */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *deviceIdsArray;
/** The number of items in @c deviceIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger deviceIdsArray_Count;

/** По типам измерений */
// |signTypesArray| contains |KEYAPISTELEMETRYCONTROLV1Indicator_SignType|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *signTypesArray;
/** The number of items in @c signTypesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger signTypesArray_Count;

/**
 * По списку ключей индикаторов.
 * Устарело, использовать метод GetDeviceIndicator
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *idsArray GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.IndicatorFilter.ids is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** The number of items in @c idsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger idsArray_Count GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.IndicatorFilter.ids is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** По серийным номерам привязанных ПУ */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *deviceSerialNumbersArray;
/** The number of items in @c deviceSerialNumbersArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger deviceSerialNumbersArray_Count;

/** По идентификаторам объектов строительства, привязанных ТУ */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *buildingIdsArray;
/** The number of items in @c buildingIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger buildingIdsArray_Count;

/** По Номерам помещений, привязанных ТУ */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *roomNumbersArray;
/** The number of items in @c roomNumbersArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger roomNumbersArray_Count;

/** По Лейблам помещений, привязанных ТУ */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *roomLabelsArray;
/** The number of items in @c roomLabelsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger roomLabelsArray_Count;

/** По ID привязанных точек учета */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *metricPointIdsArray;
/** The number of items in @c metricPointIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger metricPointIdsArray_Count;

/** По посреднику получения показаний */
// |indicatorVendorTypesArray| contains |KEYAPISTELEMETRYCONTROLV1Indicator_VendorType|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *indicatorVendorTypesArray;
/** The number of items in @c indicatorVendorTypesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger indicatorVendorTypesArray_Count;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError_FieldNumber_Path = 1,
  KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError_FieldNumber_Message = 2,
};

/**
 * Ошибки валидации.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError : GPBMessage

/** Путь к полю в формате наименования protobuf */
@property(nonatomic, readwrite, copy, null_resettable) NSString *path;

/** Валидационное сообщение */
@property(nonatomic, readwrite, copy, null_resettable) NSString *message;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountRequest_FieldNumber_Filter = 1,
};

/**
 * Запрос получения количества индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountRequest : GPBMessage

/** Фильтр по индикаторам */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на запрос получения количества индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Type_OneOfCase typeOneOfCase;

/** Всего индикаторов */
@property(nonatomic, readwrite) int32_t data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_FieldNumber_DeviceFilterValidation = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_Reason_OneOfCase_DeviceFilterValidation = 1,
};

/**
 * Ошибка запроса получения количества индикаторов
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка фильтрации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1IndicatorFilter_ValidationError *deviceFilterValidation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorCountResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorRequest_FieldNumber_Id_p = 1,
};

/**
 * Запрос удаления индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorRequest : GPBMessage

/** Идентификатор */
@property(nonatomic, readwrite) int32_t id_p;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorResponse

/**
 * Ответ на запрос удаления индикатора
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeleteDeviceIndicatorResponse : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_FieldNumber_RequestId = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_FieldNumber_PostDeviceFullDuplexDeviceAsyncStatus = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_Task_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_Task_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_Task_OneOfCase_PostDeviceFullDuplexDeviceAsyncStatus = 2,
};

/**
 * Запрос создания задачи с клиента на сервере
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest : GPBMessage

/** Идентификатор запроса */
@property(nonatomic, readwrite, copy, null_resettable) NSString *requestId;

/** Задача с клиента */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_Task_OneOfCase taskOneOfCase;

/** Результат обработки устройства на клиенте */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus *postDeviceFullDuplexDeviceAsyncStatus;

@end

/**
 * Clears whatever value was set for the oneof 'task'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_ClearTaskOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_FieldNumber_DeviceId = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_FieldNumber_Data_p = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_FieldNumber_Error = 3,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Type_OneOfCase_Data_p = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Type_OneOfCase_Error = 3,
};

/**
 * Результат обработки устройства на клиенте
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus : GPBMessage

/** Идентификатор ПУ */
@property(nonatomic, readwrite) int32_t deviceId;

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Type_OneOfCase typeOneOfCase;

/** Успех */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Success *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Success

/**
 * Команда принята
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Success : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_FieldNumber_PostDeviceRequestUnknown = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_FieldNumber_PostDeviceRequestIp = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_FieldNumber_PostDeviceRequestPort = 3,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_FieldNumber_PostDeviceRequestNetworkAddress = 4,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase_PostDeviceRequestUnknown = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase_PostDeviceRequestIp = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase_PostDeviceRequestPort = 3,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase_PostDeviceRequestNetworkAddress = 4,
};

/**
 * Ошибки обработки устройства на клиенте
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_Reason_OneOfCase reasonOneOfCase;

/** Неизвестная ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError *postDeviceRequestUnknown;

/** Неверный IP */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_IpError *postDeviceRequestIp;

/** Неверный порт */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_PortError *postDeviceRequestPort;

/** Неверный сетевой адрес */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_NetworkAddressError *postDeviceRequestNetworkAddress;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError_FieldNumber_Message = 1,
};

/**
 * Неизвестная ошибка на стороне клиента
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_UnknownError : GPBMessage

/**
 * Произвольный текст ошибки на стороне клиента.
 * Отправляется в случае если в спецификации нет подходящей ошибки.
 * После анализа таких ошибок в спецификацию добавляется специальный тип под эту ошибку
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *message;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_IpError

/**
 * Причины:
 *  - Устройство не найденно на данном IP адресе
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_IpError : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_PortError

/**
 * Причины:
 *  - Устройство отсутствует на порту
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_PortError : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_NetworkAddressError

/**
 * Причины:
 *  - Неверный сетевой адрес
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexRequest_DeviceAsyncStatus_Error_NetworkAddressError : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceRequest_FieldNumber_Device = 1,
};

/**
 * Запрос сохранения ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceRequest : GPBMessage

/** Прибор учета */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *device;
/** Test to see if @c device has been set. */
@property(nonatomic, readwrite) BOOL hasDevice;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceRequest_FieldNumber_ReplaceDeviceId = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceRequest_FieldNumber_Device = 2,
};

/**
 * Запрос замены прибора учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceRequest : GPBMessage

/** Идентификатор заменяемого прибора учета */
@property(nonatomic, readwrite) int32_t replaceDeviceId;

/** Создаваемый прибор учета */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *device;
/** Test to see if @c device has been set. */
@property(nonatomic, readwrite) BOOL hasDevice;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на замену прибора учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse : GPBMessage

/** Тип ответа */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Type_OneOfCase typeOneOfCase;

/** Созданный на замену ПУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_Validation = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_ReplaceDeviceNotFound = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_CreateIndicatorsFail = 3,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_MultiLinkedMetricPoint = 4,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_WrongBuilding = 5,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_FieldNumber_MetricPointNotFound = 6,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_Validation = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_ReplaceDeviceNotFound = 2,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_CreateIndicatorsFail = 3,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_MultiLinkedMetricPoint = 4,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_WrongBuilding = 5,
  KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase_MetricPointNotFound = 6,
};

/**
 * Ошибка замены ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка валидации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device_ValidationError *validation;

/** Не найден заменяемый ПУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_ReplaceDeviceNotFound *replaceDeviceNotFound;

/** Не удалось создать индикаторы нового ПУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_CreateIndicatorsFail *createIndicatorsFail;

/** Попытка замены ПУ, привязанного ко многим ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MultiLinkedMetricPoint *multiLinkedMetricPoint;

/** Заменяющий ПУ не привязан к дому заменяемого ПУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_WrongBuilding *wrongBuilding;

/** Заменяемый ПУ не привязан к ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MetricPointNotFound *metricPointNotFound;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_ReplaceDeviceNotFound

/**
 * Не найден заменяемый ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_ReplaceDeviceNotFound : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_CreateIndicatorsFail

/**
 * Не удалось создать индикаторы нового ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_CreateIndicatorsFail : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MultiLinkedMetricPoint

/**
 * Попытка замены ПУ, привязанного ко многим ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MultiLinkedMetricPoint : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_WrongBuilding

/**
 * Заменяющий ПУ не привязан к дому заменяемого ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_WrongBuilding : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MetricPointNotFound

/**
 * Заменяемый ПУ не привязан к ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceReplaceResponse_Error_MetricPointNotFound : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_FieldNumber_RequestId = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_FieldNumber_PostDevice = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_Event_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_Event_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_Event_OneOfCase_PostDevice = 2,
};

/**
 * Событие изменения ПУ на сервера
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse : GPBMessage

/** Идентификатор запроса */
@property(nonatomic, readwrite, copy, null_resettable) NSString *requestId;

/** Событие */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_Event_OneOfCase eventOneOfCase;

/** Измененние ПУ на сервере */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceResponse *postDevice;

@end

/**
 * Clears whatever value was set for the oneof 'event'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse_ClearEventOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceFullDuplexResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на изменение ПУ на сервере
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceResponse : GPBMessage

/** Тип ответа */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Type_OneOfCase typeOneOfCase;

/** ПУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_FieldNumber_Validation = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_Reason_OneOfCase_Validation = 1,
};

/**
 * Ошибка запроса сохранения ПУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка валидации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device_ValidationError *validation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostDeviceResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1Indicator

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_Id_p = 1,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_DeviceId = 2,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_Title = 3,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_UnitType = 4,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_SignType = 5,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_CreatedAt = 6,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_ChangedAt = 7,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_IsIndividual = 8,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_CompatibilityCode = 9,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_ArchiveType = 10,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_PresentationUnitType = 11,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_Coefficient = 12,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_Shift = 13,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_RoundDecimalDigits = 14,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_MetricExpectedFreq = 15,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_ChannelNumber = 16,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_ChannelOrder = 17,
  KEYAPISTELEMETRYCONTROLV1Indicator_FieldNumber_VendorType = 18,
};

/**
 * Индикатор
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1Indicator : GPBMessage

/** Идентификатор */
@property(nonatomic, readwrite) int32_t id_p;

/** Идентификатор прибора учета(ПУ) */
@property(nonatomic, readwrite) int32_t deviceId;

/** Название */
@property(nonatomic, readwrite, copy, null_resettable) NSString *title;

/** Тип единицы измерения, в которой интерпретировано, получаемое измерение */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_UnitType unitType;

/** Тип измерения */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_SignType signType;

/** Дата создания */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *createdAt;
/** Test to see if @c createdAt has been set. */
@property(nonatomic, readwrite) BOOL hasCreatedAt;

/**
 * Дата последнего изменения.
 * Заполняется и обновляется сервером.
 * Заполняется при создании и изменении.
 * Является версией объекта
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *changedAt;
/** Test to see if @c changedAt has been set. */
@property(nonatomic, readwrite) BOOL hasChangedAt;

/** Флаг видимости индикатора для клиента */
@property(nonatomic, readwrite) BOOL isIndividual;

/** Код для совместимости с поставщиком метрик */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *compatibilityCode;
/** Test to see if @c compatibilityCode has been set. */
@property(nonatomic, readwrite) BOOL hasCompatibilityCode;

/** Тип архивности показаний */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType archiveType;

/**
 * Тип единицы измерения для отображения измерения.
 * При UNIT_TYPE_UNKNOWN отображаемые единицы совпадают с единицами источников значений, преобразования единиц не происходит.
 * Применяется после коэффициента
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_UnitType presentationUnitType;

/**
 * Коэффициент, на который умножается отображаемое значение.
 * Применяется перед преобразованием единиц измерений к presentation_unit_type и после применения поправки
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBFloatValue *coefficient;
/** Test to see if @c coefficient has been set. */
@property(nonatomic, readwrite) BOOL hasCoefficient;

/**
 * Величина поправки к отображаемому значению.
 * Применяется перед применением коэффициента
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBFloatValue *shift;
/** Test to see if @c shift has been set. */
@property(nonatomic, readwrite) BOOL hasShift;

/**
 * Количество возвращаемых десятичных знаков при округлении итогового значения.
 * При пустом параметре округления не происходит.
 * Применяется после преобразования единиц измерения
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *roundDecimalDigits;
/** Test to see if @c roundDecimalDigits has been set. */
@property(nonatomic, readwrite) BOOL hasRoundDecimalDigits;

/** Ожидаемая частота поступления показаний в днях */
@property(nonatomic, readwrite) int32_t metricExpectedFreq;

/** Номер канала для многоканального ПУ */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *channelNumber;
/** Test to see if @c channelNumber has been set. */
@property(nonatomic, readwrite) BOOL hasChannelNumber;

/** Порядковый номер канала для многоканального ПУ */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *channelOrder;
/** Test to see if @c channelOrder has been set. */
@property(nonatomic, readwrite) BOOL hasChannelOrder;

/** Посредник получения показаний */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_VendorType vendorType;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Indicator's @c unitType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Indicator_UnitType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Indicator's @c unitType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Indicator_UnitType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Indicator's @c signType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Indicator_SignType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Indicator's @c signType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Indicator_SignType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Indicator's @c archiveType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Indicator's @c archiveType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Indicator_ArchiveType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Indicator's @c presentationUnitType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Indicator_PresentationUnitType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Indicator's @c presentationUnitType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Indicator_PresentationUnitType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Indicator's @c vendorType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Indicator_VendorType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Indicator's @c vendorType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Indicator_VendorType_RawValue(KEYAPISTELEMETRYCONTROLV1Indicator *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError_FieldNumber_Path = 1,
  KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError_FieldNumber_Message = 2,
};

/**
 * Ошибки валидации.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1Indicator_ValidationError : GPBMessage

/** Путь к полю в формате наименования protobuf */
@property(nonatomic, readwrite, copy, null_resettable) NSString *path;

/** Валидационное сообщение */
@property(nonatomic, readwrite, copy, null_resettable) NSString *message;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1Device

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Id_p = 1,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_IndicatorsArray = 2,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_MetricPoint = 3,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_CreatedAt = 4,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ChangedAt = 5,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Type = 6,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_SerialNumber = 7,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Model = 8,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Year = 9,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_FiasId = 10,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ResourceOwnerId = 11,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_StatusType = 12,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_InstalledAt = 13,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_RemovedAt = 14,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_CheckAt = 15,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_NextCheckAt = 16,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ExternalId = 17,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_PlanType = 18,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ParentId = 19,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_PipeType = 20,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_DevEui = 21,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Mac = 22,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Port = 23,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_NetworkAddress = 24,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_CommChannel = 25,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_SimNumber = 26,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_SimSerial = 27,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_IpAddressSim = 28,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Placement = 29,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_InstallationPlace = 30,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Appkey = 31,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_Appeui = 32,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ProtocolTypeLabel = 33,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ChannelNumber = 34,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_WireInterface = 35,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_BuildingId = 36,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_ManufactureYear = 37,
  KEYAPISTELEMETRYCONTROLV1Device_FieldNumber_IndicatorVendorType = 38,
};

/**
 * Прибор учёта
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1Device : GPBMessage

/** Идентификатор */
@property(nonatomic, readwrite) int32_t id_p;

/** Индикаторы */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<KEYAPISTELEMETRYCONTROLV1Indicator*> *indicatorsArray;
/** The number of items in @c indicatorsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger indicatorsArray_Count;

/** Точка учета */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *metricPoint GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.metric_point is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** Test to see if @c metricPoint has been set. */
@property(nonatomic, readwrite) BOOL hasMetricPoint GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.metric_point is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** Дата создания */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *createdAt;
/** Test to see if @c createdAt has been set. */
@property(nonatomic, readwrite) BOOL hasCreatedAt;

/**
 * Дата последнего изменения.
 * Заполняется и обновляется сервером.
 * Заполняется при создании и изменении.
 * Является версией объекта
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *changedAt;
/** Test to see if @c changedAt has been set. */
@property(nonatomic, readwrite) BOOL hasChangedAt;

/** Тип прибора учёта(ПУ) */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_Type type;

/** Серийный номер */
@property(nonatomic, readwrite, copy, null_resettable) NSString *serialNumber;

/** Производитель и модель счетчика */
@property(nonatomic, readwrite, copy, null_resettable) NSString *model;

/** Год выпуска счётчика */
@property(nonatomic, readwrite) int32_t year GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.year is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** Идентификатор строения ФИАС */
@property(nonatomic, readwrite, copy, null_resettable) NSString *fiasId GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.fias_id is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/**
 * Идентификатор владельца.
 * Заполняется сервером
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *resourceOwnerId GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.resource_owner_id is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** Тип статуса */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_StatusType statusType;

/** Дата установки */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *installedAt;
/** Test to see if @c installedAt has been set. */
@property(nonatomic, readwrite) BOOL hasInstalledAt;

/** Дата удаления */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *removedAt;
/** Test to see if @c removedAt has been set. */
@property(nonatomic, readwrite) BOOL hasRemovedAt;

/** Дата предыдущей поверки счетчика */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *checkAt;
/** Test to see if @c checkAt has been set. */
@property(nonatomic, readwrite) BOOL hasCheckAt;

/** Дата следующей поверки счетчика */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *nextCheckAt;
/** Test to see if @c nextCheckAt has been set. */
@property(nonatomic, readwrite) BOOL hasNextCheckAt;

/** Внешний дентификатор прибора учёта(ПУ) */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *externalId;
/** Test to see if @c externalId has been set. */
@property(nonatomic, readwrite) BOOL hasExternalId;

/** Тип тарифного плана */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_PlanType planType;

/** Идентификатор хаба */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *parentId;
/** Test to see if @c parentId has been set. */
@property(nonatomic, readwrite) BOOL hasParentId;

/** Тип трубопровода */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_PipeType pipeType;

/** Идентификатор модуля LoraWan */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *devEui;
/** Test to see if @c devEui has been set. */
@property(nonatomic, readwrite) BOOL hasDevEui;

/** MAC-адрес */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *mac;
/** Test to see if @c mac has been set. */
@property(nonatomic, readwrite) BOOL hasMac;

/** Номер порта */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *port;
/** Test to see if @c port has been set. */
@property(nonatomic, readwrite) BOOL hasPort;

/** Сетевой адрес */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *networkAddress;
/** Test to see if @c networkAddress has been set. */
@property(nonatomic, readwrite) BOOL hasNetworkAddress;

/**
 * Канал связи.
 * Для станции LoraWan
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *commChannel;
/** Test to see if @c commChannel has been set. */
@property(nonatomic, readwrite) BOOL hasCommChannel;

/**
 * MSISDN SIM-карты.
 * Номер телефона
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *simNumber;
/** Test to see if @c simNumber has been set. */
@property(nonatomic, readwrite) BOOL hasSimNumber;

/** Серийный номер SIM-карты */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *simSerial;
/** Test to see if @c simSerial has been set. */
@property(nonatomic, readwrite) BOOL hasSimSerial;

/** IP адрес SIM-карты */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *ipAddressSim;
/** Test to see if @c ipAddressSim has been set. */
@property(nonatomic, readwrite) BOOL hasIpAddressSim;

/** Размещение */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *placement;
/** Test to see if @c placement has been set. */
@property(nonatomic, readwrite) BOOL hasPlacement;

/** Место установки */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *installationPlace;
/** Test to see if @c installationPlace has been set. */
@property(nonatomic, readwrite) BOOL hasInstallationPlace;

/**
 * Kлюч приложения.
 * Используется в процессе присоединения к сети для получения сессионных ключей NwkSKey и AppSKey для LoRaWAN [128 бит]
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *appkey GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.appkey is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** Test to see if @c appkey has been set. */
@property(nonatomic, readwrite) BOOL hasAppkey GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.appkey is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/**
 * Идентификатор приложения.
 * Для LoRaWAN [64 бита]
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *appeui GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.appeui is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** Test to see if @c appeui has been set. */
@property(nonatomic, readwrite) BOOL hasAppeui GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.appeui is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** Тип протокола */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *protocolTypeLabel;
/** Test to see if @c protocolTypeLabel has been set. */
@property(nonatomic, readwrite) BOOL hasProtocolTypeLabel;

/** Номер канала для многоканального ПУ */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *channelNumber GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.channel_number is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** Test to see if @c channelNumber has been set. */
@property(nonatomic, readwrite) BOOL hasChannelNumber GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.Device.channel_number is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** Тип проводного интерфейса */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *wireInterface;
/** Test to see if @c wireInterface has been set. */
@property(nonatomic, readwrite) BOOL hasWireInterface;

/** Идентификатор объекта строительства */
@property(nonatomic, readwrite) int32_t buildingId;

/** Год выпуска счётчика */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Value *manufactureYear;
/** Test to see if @c manufactureYear has been set. */
@property(nonatomic, readwrite) BOOL hasManufactureYear;

/** Посредник получения показаний */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Indicator_VendorType indicatorVendorType;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device's @c type property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_Type_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device's @c type property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_Type_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device's @c statusType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_StatusType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device's @c statusType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_StatusType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device's @c planType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_PlanType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device's @c planType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_PlanType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device's @c pipeType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_PipeType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device's @c pipeType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_PipeType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device's @c indicatorVendorType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device's @c indicatorVendorType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1Device *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1Device_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1Device_ValidationError_FieldNumber_Path = 1,
  KEYAPISTELEMETRYCONTROLV1Device_ValidationError_FieldNumber_Message = 2,
};

/**
 * Ошибки валидации.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1Device_ValidationError : GPBMessage

/** Путь к полю в формате наименования protobuf */
@property(nonatomic, readwrite, copy, null_resettable) NSString *path;

/** Валидационное сообщение */
@property(nonatomic, readwrite, copy, null_resettable) NSString *message;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1Device_MetricPoint

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_Id_p = 1,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_MetricType = 2,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_RoomNumber = 3,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_RoomLabel = 4,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_ZoneLabel = 5,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_StatusType = 6,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_AccountingType = 7,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_CreatedAt = 8,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_PrimaryCurrentType = 9,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_SecondaryCurrentType = 10,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_BuildingId = 11,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_ChangedAt = 12,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_BuildingLevel = 13,
  KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_FieldNumber_BuildingSection = 14,
};

/**
 * Точка учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1Device_MetricPoint : GPBMessage

/** Идентификатор */
@property(nonatomic, readwrite, copy, null_resettable) NSString *id_p;

/** Тип энергоресурса */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType metricType;

/** Номер помещения */
@property(nonatomic, readwrite, copy, null_resettable) NSString *roomNumber;

/** Лейбл помещения */
@property(nonatomic, readwrite, copy, null_resettable) NSString *roomLabel;

/** Зона */
@property(nonatomic, readwrite, strong, null_resettable) GPBStringValue *zoneLabel;
/** Test to see if @c zoneLabel has been set. */
@property(nonatomic, readwrite) BOOL hasZoneLabel;

/** Тип статуса */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType statusType;

/** Тип учёта */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType accountingType;

/** Дата создания */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *createdAt;
/** Test to see if @c createdAt has been set. */
@property(nonatomic, readwrite) BOOL hasCreatedAt;

/** Тип номинала первичного тока */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType primaryCurrentType;

/** Тип номинала вторичной обмотки */
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1Device_SecondaryCurrentType secondaryCurrentType;

/** Идентификатор объекта строительства */
@property(nonatomic, readwrite) int32_t buildingId;

/** Дата изменения */
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *changedAt;
/** Test to see if @c changedAt has been set. */
@property(nonatomic, readwrite) BOOL hasChangedAt;

/** Уровень */
@property(nonatomic, readwrite) int32_t buildingLevel;

/** Секция */
@property(nonatomic, readwrite) int32_t buildingSection;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c metricType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c metricType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c statusType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c statusType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_MetricPoint_StatusType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c accountingType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c accountingType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_MetricPoint_AccountingType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c primaryCurrentType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c primaryCurrentType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_MetricPoint_PrimaryCurrentType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c secondaryCurrentType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_SecondaryCurrentType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1Device_MetricPoint's @c secondaryCurrentType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1Device_MetricPoint_SecondaryCurrentType_RawValue(KEYAPISTELEMETRYCONTROLV1Device_MetricPoint *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_FieldNumber_Filter = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_FieldNumber_Paging = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_Pagination_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_Pagination_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_Pagination_OneOfCase_Paging = 2,
};

/**
 * Запрос получения списка
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest : GPBMessage

/** Фильтр */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

/** Вариант разбиения на страницы */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_Pagination_OneOfCase paginationOneOfCase;

/** Пагинация */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DevicePaging *paging;

@end

/**
 * Clears whatever value was set for the oneof 'pagination'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceListRequest *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DevicePaging

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DevicePaging_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DevicePaging_FieldNumber_OrderByType = 1,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_FieldNumber_DirectionType = 2,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_FieldNumber_Limit = 3,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_FieldNumber_Offset = 4,
};

/**
 * Пагинация устройств
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DevicePaging : GPBMessage

/**
 * Тип значения сортировки.
 * По умолчанию: ID
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType orderByType;

/**
 * Тип направления сортировки.
 * По умолчанию: DESC
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType directionType;

/**
 * Количество записей на страницу.
 * Минимальное значение: 1.
 * Максимальное значение: 100.
 * По умолчанию: 20.
 * Если значение 0 (не передано), то выставляем значение по умолчанию
 **/
@property(nonatomic, readwrite) int32_t limit;

/**
 * Сдвиг.
 * По умолчанию: 0
 **/
@property(nonatomic, readwrite) int32_t offset;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DevicePaging's @c orderByType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DevicePaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DevicePaging's @c orderByType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DevicePaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DevicePaging *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DevicePaging's @c directionType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DevicePaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DevicePaging's @c directionType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DevicePaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DevicePaging *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_FieldNumber_Limit = 1,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_FieldNumber_Offset = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_Reason_OneOfCase_Limit = 1,
  KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_Reason_OneOfCase_Offset = 2,
};

/**
 * Ошибка валидации постраничной пагинации по ПУ.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_Reason_OneOfCase reasonOneOfCase;

/** Количество передано некорректно */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_LimitInvalid *limit;

/** Сдвиг передан некорректно */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_OffsetInvalid *offset;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_LimitInvalid

/**
 * Причины:
 * - Значение количества < 0 или > 100
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_LimitInvalid : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_OffsetInvalid

/**
 * Причины:
 * - Значение сдвига < 0
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError_OffsetInvalid : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на запрос получения списка приборов учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Type_OneOfCase typeOneOfCase;

/** Прибор учета */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1Device *data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_FieldNumber_DeviceFilterValidation = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_FieldNumber_DevicePagingValidation = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_Reason_OneOfCase_DeviceFilterValidation = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_Reason_OneOfCase_DevicePagingValidation = 2,
};

/**
 * Ошибка запроса получения списка приборов учета
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка фильтрации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError *deviceFilterValidation;

/** Ошибка пагинации  по страницам */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DevicePaging_ValidationError *devicePagingValidation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceListResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceFilter

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_FiasIdsArray = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_TypesArray = 2,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_StatusTypesArray = 3,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_ModelsArray = 4,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_MetricPointMetricTypesArray = 5,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_RoomNumbersArray = 6,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_RoomLabelsArray = 7,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_ParentIdsArray = 8,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_IdsArray = 9,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_BuildingIdsArray = 10,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_SerialNumbersArray = 11,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_MetricPointIdsArray = 12,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_SerialIdsArray = 13,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_OrponsArray = 14,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_FieldNumber_IndicatorVendorTypesArray = 15,
};

/**
 * Фильтр для запроса приборов учета.
 * При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
 * При передаче нескольких разных параметров фильтра они работают в выборке через И
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceFilter : GPBMessage

/** По ФИАС */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *fiasIdsArray;
/** The number of items in @c fiasIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger fiasIdsArray_Count;

/** По типам приборов учета */
// |typesArray| contains |KEYAPISTELEMETRYCONTROLV1Device_Type|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *typesArray;
/** The number of items in @c typesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger typesArray_Count;

/** По типам статусов */
// |statusTypesArray| contains |KEYAPISTELEMETRYCONTROLV1Device_StatusType|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *statusTypesArray;
/** The number of items in @c statusTypesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger statusTypesArray_Count;

/** По модели счетчика */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *modelsArray;
/** The number of items in @c modelsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger modelsArray_Count;

/** По типам метрик */
// |metricPointMetricTypesArray| contains |KEYAPISTELEMETRYCONTROLV1Device_MetricPoint_MetricType|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *metricPointMetricTypesArray;
/** The number of items in @c metricPointMetricTypesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger metricPointMetricTypesArray_Count;

/** По номерам помещений точек учета, привязанных через индикаторы */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *roomNumbersArray;
/** The number of items in @c roomNumbersArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger roomNumbersArray_Count;

/** По лейблам помещений точек учета, привязанных через индикаторы */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *roomLabelsArray;
/** The number of items in @c roomLabelsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger roomLabelsArray_Count;

/** По идентификаторам хабов */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *parentIdsArray;
/** The number of items in @c parentIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger parentIdsArray_Count;

/**
 * По идентификаторам приборов учета.
 * Устарело, использовать метод GetDevice
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *idsArray GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.DeviceFilter.ids is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");
/** The number of items in @c idsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger idsArray_Count GPB_DEPRECATED_MSG("keyapis.telemetry_control.v1.DeviceFilter.ids is deprecated (see keyapis/telemetry_control/v1/keyapis_telemetry_control_device_v1.proto).");

/** По идентификатору объекта строительства */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *buildingIdsArray;
/** The number of items in @c buildingIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger buildingIdsArray_Count;

/** По серийным номерам */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *serialNumbersArray;
/** The number of items in @c serialNumbersArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger serialNumbersArray_Count;

/** По ID точек учета, привязанных через индикаторы */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *metricPointIdsArray;
/** The number of items in @c metricPointIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger metricPointIdsArray_Count;

/** Смешанный поиск по полям serial_number, dev_eui, MAC-адрес, model, external_id */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *serialIdsArray;
/** The number of items in @c serialIdsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger serialIdsArray_Count;

/** По ОРПОНам */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt64Array *orponsArray;
/** The number of items in @c orponsArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger orponsArray_Count;

/** По посреднику получения показаний */
// |indicatorVendorTypesArray| contains |KEYAPISTELEMETRYCONTROLV1Indicator_VendorType|
@property(nonatomic, readwrite, strong, null_resettable) GPBEnumArray *indicatorVendorTypesArray;
/** The number of items in @c indicatorVendorTypesArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger indicatorVendorTypesArray_Count;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError_FieldNumber_Path = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError_FieldNumber_Message = 2,
};

/**
 * Ошибки валидации.
 * Эти проверки выполняются до обращения в базу данных
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError : GPBMessage

/** Путь к полю в формате наименования protobuf */
@property(nonatomic, readwrite, copy, null_resettable) NSString *path;

/** Валидационное сообщение */
@property(nonatomic, readwrite, copy, null_resettable) NSString *message;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceCountRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceCountRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountRequest_FieldNumber_Filter = 1,
};

/**
 * Запрос получения количества устройств
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceCountRequest : GPBMessage

/** Фильтр по устройствам */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_FieldNumber_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_FieldNumber_Error = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Type_OneOfCase_Data_p = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Type_OneOfCase_Error = 2,
};

/**
 * Ответ на запрос получения количества устройств
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Type_OneOfCase typeOneOfCase;

/** Всего устройств */
@property(nonatomic, readwrite) int32_t data_p;

/** Ошибка */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error *error;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_FieldNumber_DeviceFilterValidation = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_Reason_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_Reason_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_Reason_OneOfCase_DeviceFilterValidation = 1,
};

/**
 * Ошибка запроса получения количества устройств
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error : GPBMessage

/** Причина ошибки */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_Reason_OneOfCase reasonOneOfCase;

/** Ошибка фильтрации */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceFilter_ValidationError *deviceFilterValidation;

@end

/**
 * Clears whatever value was set for the oneof 'reason'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceCountResponse_Error *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_FieldNumber_Filter = 1,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_FieldNumber_Paging = 2,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_Pagination_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_Pagination_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_Pagination_OneOfCase_Paging = 2,
};

/**
 * Запрос получения списка
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest : GPBMessage

/** Фильтр связей индикаторов и ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

/** Вариант разбиения на страницы */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_Pagination_OneOfCase paginationOneOfCase;

/** Пагинация */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging *paging;

@end

/**
 * Clears whatever value was set for the oneof 'pagination'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListRequest *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter_FieldNumber_IndicatorIdArray = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter_FieldNumber_MetricPointIdArray = 2,
};

/**
 * Фильтр для запроса индикаторов и ТУ.
 * При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
 * При передаче нескольких разных параметров фильтра они работают в выборке через И
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter : GPBMessage

/** По Идентификатору индикатора */
@property(nonatomic, readwrite, strong, null_resettable) GPBInt32Array *indicatorIdArray;
/** The number of items in @c indicatorIdArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger indicatorIdArray_Count;

/** По Идентификатору ТУ */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<NSString*> *metricPointIdArray;
/** The number of items in @c metricPointIdArray without causing the container to be created. */
@property(nonatomic, readonly) NSUInteger metricPointIdArray_Count;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_FieldNumber_OrderByType = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_FieldNumber_DirectionType = 2,
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_FieldNumber_Limit = 3,
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_FieldNumber_Offset = 4,
};

/**
 * Пагинация связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging : GPBMessage

/**
 * Тип значения сортировки.
 * По умолчанию: ID
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType orderByType;

/**
 * Тип направления сортировки.
 * По умолчанию: DESC
 **/
@property(nonatomic, readwrite) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType directionType;

/**
 * Количество записей на страницу.
 * Минимальное значение: 1.
 * Максимальное значение: 100.
 * По умолчанию: 20.
 * Если значение 0 (не передано), то выставляем значение по умолчанию
 **/
@property(nonatomic, readwrite) int32_t limit;

/**
 * Сдвиг.
 * По умолчанию: 0
 **/
@property(nonatomic, readwrite) int32_t offset;

@end

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging's @c orderByType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging's @c orderByType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging *message, int32_t value);

/**
 * Fetches the raw value of a @c KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging's @c directionType property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging *message);
/**
 * Sets the raw value of an @c KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging's @c directionType property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetKEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointPaging *message, int32_t value);

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения списка связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_Type_OneOfCase typeOneOfCase;

/** Связь индикатора и ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint *data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointListResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint_FieldNumber_IndicatorId = 1,
  KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint_FieldNumber_MetricPointId = 2,
};

/**
 * Связка индикатора и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint : GPBMessage

/**
 * Идентификатор индикатора.
 * # Диапазон: 0..2147483647
 **/
@property(nonatomic, readwrite) int32_t indicatorId;

/**
 * Идентификатору ТУ.
 * # Тип: Guid
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *metricPointId;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountRequest_FieldNumber_Filter = 1,
};

/**
 * Запрос получения количества связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountRequest : GPBMessage

/** Фильтр связей индикаторов и ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPointFilter *filter;
/** Test to see if @c filter has been set. */
@property(nonatomic, readwrite) BOOL hasFilter;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_FieldNumber_Data_p = 1,
};

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_Type_OneOfCase) {
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_Type_OneOfCase_GPBUnsetOneOfCase = 0,
  KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_Type_OneOfCase_Data_p = 1,
};

/**
 * Ответ на запрос получения количества связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse : GPBMessage

/** Тип результата */
@property(nonatomic, readonly) KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_Type_OneOfCase typeOneOfCase;

/** Всего связей индикаторов и ТУ */
@property(nonatomic, readwrite) int32_t data_p;

@end

/**
 * Clears whatever value was set for the oneof 'type'.
 **/
void KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetDeviceIndicatorMetricPointCountResponse *message);

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachRequest_FieldNumber_DeviceIndicatorMetricPoint = 1,
};

/**
 * Запрос сохранения связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachRequest : GPBMessage

/** Связь индикатора и ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint *deviceIndicatorMetricPoint;
/** Test to see if @c deviceIndicatorMetricPoint has been set. */
@property(nonatomic, readwrite) BOOL hasDeviceIndicatorMetricPoint;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachResponse

/**
 * Ответ на запрос сохранения связи индикатора и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointAttachResponse : GPBMessage

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachRequest

typedef GPB_ENUM(KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachRequest_FieldNumber) {
  KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachRequest_FieldNumber_DeviceIndicatorMetricPoint = 1,
};

/**
 * Запрос удаления связей индикаторов и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachRequest : GPBMessage

/** Связь индикатора и ТУ */
@property(nonatomic, readwrite, strong, null_resettable) KEYAPISTELEMETRYCONTROLV1DeviceIndicatorMetricPoint *deviceIndicatorMetricPoint;
/** Test to see if @c deviceIndicatorMetricPoint has been set. */
@property(nonatomic, readwrite) BOOL hasDeviceIndicatorMetricPoint;

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachResponse

/**
 * Ответ на запрос удаления связи индикатора и ТУ
 **/
GPB_FINAL @interface KEYAPISTELEMETRYCONTROLV1PutDeviceIndicatorMetricPointDetachResponse : GPBMessage

@end

NS_ASSUME_NONNULL_END

CF_EXTERN_C_END

#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)

// clang-format on
