/*
  События устройств (домофоны, калитки, шлагбаумы)
*/
syntax = "proto3";

import "google/api/field_behavior.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "keyapis/device/v1/keyapis_device_device_v1.proto";
import "keyapis/device/v1/keyapis_device_access_v1.proto";

package keyapis.device.v1;

option java_package = "ru.keyapis.device.v1";
option java_outer_classname = "KeyapisDeviceV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_device_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.Device.V1";
option objc_class_prefix = "KEYAPISDEVICEV1";
option php_namespace = "Keyapis\\Device\\V1";
option ruby_package = "Keyapis::Device::V1";
option optimize_for = LITE_RUNTIME;

//Задача на конфигурирование устройства.
// Очередь key.device.configure_device
message ConfigureDeviceTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Адрес устройства
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя устройства
  string username = 4 [(google.api.field_behavior) = REQUIRED];
  // Пароль пользователья устройства
  string password = 5 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Пресет устройства
  keyapis.device.v1.Preset preset = 7 [(google.api.field_behavior) = REQUIRED];
  // Sip аккаунт
  message SipAccount {
    // Имя
    string name = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер
    string number = 2 [(google.api.field_behavior) = REQUIRED];
    // Имя пользователя
    string user = 3 [(google.api.field_behavior) = REQUIRED];
    // Пароль
    string password = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Sip аккаунт
  SipAccount sip_account = 8;
  // Список сип-номеров в помещениях.
  // # Диапазон: 0..10000
  repeated SipRoom sip_rooms = 9;
  // Параметры калитки
  message Gate {
    // Состояние параметра калитки.
    // true - используется, необходимо настроить параметы.
    // false - не используется, необходимо выключить параметры калитки
    bool is_active = 1 [(google.api.field_behavior) = REQUIRED];
    // Параметры реле
    message RelaySettings {
      // Состояние реле.
      // true - по команде «Открыть дверь» произойдет открытие реле.
      // false - по команде «Открыть дверь» не произойдет открытие реле
      bool is_active = 1 [(google.api.field_behavior) = REQUIRED];
      // Индекс реле.
      // # Диапазон: 0..64
      int32 relay_index = 2;
    }
    // Параметры реле
    repeated RelaySettings relay_settings = 2 [(google.api.field_behavior) = REQUIRED];
    // Диапазон квартир
    message RoomRange {
      // Адрес дома
      string address = 1 [(google.api.field_behavior) = REQUIRED];
      // Номер дома (подъезда)
      string prefix = 2 [(google.api.field_behavior) = REQUIRED];
      // Начало диапазона включительно
      string first_room_number = 3 [(google.api.field_behavior) = REQUIRED];
      // Конец диапазона включительно
      string last_room_number = 4 [(google.api.field_behavior) = REQUIRED];
    }
    // Диапазоны квартир
    repeated RoomRange room_ranges = 3 [(google.api.field_behavior) = REQUIRED];
  }
  // Параметры калитки
  Gate gate = 10;
  // Ключи
  repeated Rfid rfids = 11;
  // Коды
  repeated Code codes = 12;
  // Таймзона NTP
  string ntp_timezone = 13 [(google.api.field_behavior) = REQUIRED];
  // Профиль шифрования
  message EncryptionProfile {
    // Номер сектора
    int32 sector_number = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер блока
    int32 block_number = 2 [(google.api.field_behavior) = REQUIRED];
    // aes ключ
    string aes_key = 3 [(google.api.field_behavior) = REQUIRED];
    // Индекс первого символа для секрета
    int32 start_index = 4;
    // Индекс последнего символа для секрета
    int32 end_index = 5;
  }
  // Параметр Sl3
  message Sl3 {
    // Статус настройки SL3
    bool is_enabled = 1 [(google.api.field_behavior) = REQUIRED];
    // Профиль шифрования
    EncryptionProfile encryption_profile = 2;
  }
  // Параметр Sl3
  Sl3 sl3 = 14;
  // Настройки вызова экстренной службы
  EmergencyCallSettings emergency_call_settings = 15;
}

// Настройки вызова экстренной службы
message EmergencyCallSettings {
  // Возможность вызова экстренной службы
  bool is_call_available = 1;
  // Параметры вызова экстренной службы
  message EmergencyCallParameter {
    // АБС-номер экстренной службы.
    // # Паттерн: /^\+[1-9][0-9]{10}$/
    string emergency_number = 1 [(google.api.field_behavior) = REQUIRED];
    // Исходящий ABC-номер домофона.
    // # Паттерн: /^\+[1-9][0-9]{10}$/
    string abc_number = 2 [(google.api.field_behavior) = REQUIRED];
    // Адрес SIP-транка.
    // # Диапазон: 5..250
    string sip_trunk_host = 3 [(google.api.field_behavior) = REQUIRED];
    // Регион вызова экстренной службы.
    // # Диапазон: 3..32
    string destination_name = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Параметры вызова экстренной службы
  EmergencyCallParameter emergency_call_parameter = 2;
}

// Результат задачи на конфигурирование устройства.
// Очередь key.device.configure_device_result
message ConfigureDeviceResultTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Дата конфигурации устройства
  google.protobuf.Timestamp configured_at = 3 [(google.api.field_behavior) = REQUIRED];
  // Аппаратная версия
  string hardware_version = 4;
  // Версия прошивки
  string firmware_version = 5;
  // Модель
  string model = 6 [(google.api.field_behavior) = REQUIRED];
  // Результат конфигурации устройства
  message Settings {
    // Справочник статусов конфигурации устройства.
    // # Тип: byte
    enum StatusType {
      // Значение не указано
      STATUS_TYPE_UNKNOWN = 0;
      // Настроен
      SUCCESS = 1;
      // Ошибка
      ERROR = 2;
    }
    // Состояние настройки
    message State {
      // Статус конфигурации устройства
      StatusType status_type = 1 [(google.api.field_behavior) = REQUIRED];
      // Текст ошибки
      string error_message = 2;
    }
    // Настройка ключей
    message Rfids {
      // Статус конфигурации устройства
      StatusType status_type = 1;
      // Текст ошибки
      string error_message = 2;
      // Загруженные ключи
      repeated Rfid loaded_rfids = 3;
      // Незагруженные ключи
      repeated RfidError unloaded_rfids = 4;
    }
    // Настройка кодов
    message Codes {
      // Статус конфигурации устройства
      StatusType status_type = 1;
      // Текст ошибки
      string error_message = 2;
      // Загруженные коды
      repeated Code loaded_codes = 3;
      // Незагруженные коды
      repeated CodeError unloaded_codes = 4;
    }
    // Настройка квартир
    message SipRooms {
      // Статус конфигурации устройства
      StatusType status_type = 1;
      // Текст ошибки
      string error_message = 2;
      // Загруженные квартиры
      repeated SipRoom loaded_sip_rooms = 3;
      // Незагруженные квартиры
      repeated SipRoomError unloaded_sip_rooms = 4;
    }
    // Установка пресета
    State preset = 1 [(google.api.field_behavior) = REQUIRED];
    // Настройка SIP-аккаунта
    State sip_account = 2;
    // Настройка сип-номеров в помещениях
    SipRooms sip_rooms = 3;
    // Настройка калитки
    State gate = 4;
    // Настройка ключей
    Rfids rfids = 5;
    // Настройка кодов
    Codes codes = 6;
    // Настройка sl3
    State sl3 = 7;
    // Настройки вызова экстренной службы
    State emergency_call_settings = 8;
  }
  // Результат настроек
  Settings settings = 7;
}

// Задача на использование аналоговых трубок.
// Очередь key.device.cms_available
message CmsServiceAvailableTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ОРПОН дома
  int64 orpon_id = 2 [(google.api.field_behavior) = REQUIRED];
}


// Задача на конфигурирование устройства.
// Очередь key.device.control_device
message ControlDeviceTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Адрес устройства
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя устройства
  string username = 4 [(google.api.field_behavior) = REQUIRED];
  // Пароль пользователья устройства
  string password = 5 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Распознование лиц
  message FaceRecognition {
    // Статус настройки распознавания лиц
    bool is_enabled = 1 [(google.api.field_behavior) = REQUIRED];
  }
  // Распознование лиц
  FaceRecognition face_recognition = 7;
  // Пресет устройства
  keyapis.device.v1.Preset preset = 8;
  // Таймзона NTP
  google.protobuf.StringValue ntp_timezone = 9;
  // Sip аккаунт
  ConfigureDeviceTask.SipAccount sip_account = 10;
  // Параметры калитки
  ConfigureDeviceTask.Gate gate = 11;
  // Консьерж
  message Concierge {
    // Номер сип-трубки.
    // # Диапазон: 5..14
    string sip_number = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер помещения.
    // # Диапазон: 1..10000
    int32 room_number = 2 [(google.api.field_behavior) = REQUIRED];
  }
  // Консьерж
  Concierge concierge = 12;
  // Автосбор
  message Autocollect {
    // Статус настройки автосбор
    bool is_enabled = 1 [(google.api.field_behavior) = REQUIRED];
  }
  // Автосбор
  Autocollect autocollect = 13;
  // Параметр sl3
  ConfigureDeviceTask.Sl3 sl3 = 14;
  // Настройки вызова экстренной службы
  EmergencyCallSettings emergency_call_settings = 15;
}

// Результат задачи на конфигурирование устройства.
// Очередь key.device.control_device_result
message ControlDeviceResultTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Дата конфигурации устройства
  google.protobuf.Timestamp configured_at = 3 [(google.api.field_behavior) = REQUIRED];
  // Аппаратная версия
  string hardware_version = 4;
  // Версия прошивки
  string firmware_version = 5;
  // Модель
  string model = 6 [(google.api.field_behavior) = REQUIRED];
  // Результат конфигурации устройства
  message Settings {
    // Настройка распознавания лиц
    ConfigureDeviceResultTask.Settings.State face_recognition = 1;
    // Установка пресета
    ConfigureDeviceResultTask.Settings.State preset = 2;
    // Настройка SIP-аккаунта
    ConfigureDeviceResultTask.Settings.State sip_account = 3;
    // Настройка калитки
    ConfigureDeviceResultTask.Settings.State gate = 4;
    // Настройка автосбора
    ConfigureDeviceResultTask.Settings.State autocollect = 5;
    // Настройка консьержа
    ConfigureDeviceResultTask.Settings.State concierge = 6;
    // Настройка sl3
    ConfigureDeviceResultTask.Settings.State sl3 = 7;
    // Настройки вызова экстренной службы
    ConfigureDeviceResultTask.Settings.State emergency_call_settings = 8;
  }
  // Результат настроек
  Settings settings = 7;
}

// Задача на блокировку аналоговых трубок на устройствах для квартир.
// Очередь key.device.cms_phones_block
message BlockCmsPhonesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Аналоговая трубка
  message CmsPhone {
    // Идентификатор аналоговой трубки
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 2 [(google.api.field_behavior) = REQUIRED];
  }
  // Список аналоговых трубок
  repeated CmsPhone cms_phones = 6;
}

// Задача ответ на успешную блокировку аналоговой трубки на устройстве для квартиры.
// Очередь key.device.cms_phone_block_success
message BlockCmsPhoneSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор аналоговой трубки
  int32 cms_phone_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Дата и время блокировки аналоговой трубки
  google.protobuf.Timestamp blocked_at = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на ошибку при блокировке аналоговой трубки на устройстве для квартиры.
// Очередь key.device.cms_phone_block_fail
message BlockCmsPhoneFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор аналоговой трубки
  int32 cms_phone_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Текст ошибки
  string error_message = 3 [(google.api.field_behavior) = REQUIRED];
  // Дата и время события
  google.protobuf.Timestamp occured_at = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача разблокировку аналоговых трубок на устройстве для квартир.
// Очередь key.device.cms_phones_activate
message ActivateCmsPhonesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Аналоговая трубка
  message CmsPhone {
    // Идентификатор аналоговой трубки
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 2 [(google.api.field_behavior) = REQUIRED];
  }
  // Список аналоговых трубок
  repeated CmsPhone cms_phones = 6;
}

// Задача ответ на успешную разблокировку аналоговой трубки на устройстве для квартиры.
// Очередь key.device.cms_phone_activate_success
message ActivateCmsPhoneSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор аналоговой трубки
  int32 cms_phone_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Дата и время разблокировки аналоговой трубки
  google.protobuf.Timestamp activated_at = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на ошибку при разблокировке аналоговой трубки на устройстве для квартиры.
// Очередь key.device.cms_phone_activate_fail
message ActivateCmsPhoneFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор аналоговой трубки
  int32 cms_phone_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Текст ошибки
  string error_message = 3 [(google.api.field_behavior) = REQUIRED];
  // Дата и время события
  google.protobuf.Timestamp occured_at = 4 [(google.api.field_behavior) = REQUIRED];
}

// Сообщение о появлении возможности работы с аналоговыми трубками на устройстве.
// Очередь key.device.device_cms_available
message CmsAvailableTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
}

// Сип-номер в помещении
message SipRoom {
  // Номер сип-трубки.
  // # Диапазон: 5..14
  string sip_number = 1 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения.
  // # Диапазон: 1..10000
  string room_number = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор квартиры.
  // # Диапазон: 1..2147483647
  int32 room_id = 3 [(google.api.field_behavior) = REQUIRED];
}

// Ошибка сип-номера в помещении
message SipRoomError {
  // Номер сип-трубки.
  // # Диапазон: 5..14
  string sip_number = 1 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения.
  // # Диапазон: 1..10000
  string room_number = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор квартиры.
  // # Диапазон: 1..2147483647
  int32 room_id = 3 [(google.api.field_behavior) = REQUIRED];
  // Сообщение об ошибке
  string message = 4 [(google.api.field_behavior) = REQUIRED];
}

// Ключ
message Rfid {
  // Идентификатор ключа
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
  // Значение ключа
  string key = 2 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения к которому прявязан ключ
  string room_number = 3 [(google.api.field_behavior) = REQUIRED];
}
// Код
message Code {
  // Идентификатор кода
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
  // Значение кода
  string code = 2 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения к которому прявязан код
  string room_number = 3 [(google.api.field_behavior) = REQUIRED];
}
// Ошибка ключа
message RfidError {
  // Идентификатор ключа
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
  // Значение ключа
  string key = 2 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения к которому прявязан ключ
  string room_number = 3 [(google.api.field_behavior) = REQUIRED];
  // Сообщение об ошибке
  string message = 4 [(google.api.field_behavior) = REQUIRED];
}

// Ошибка кода
message CodeError {
  // Идентификатор кода
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
  // Значение кода
  string code = 2 [(google.api.field_behavior) = REQUIRED];
  // Номер помещения к которому прявязан код
  string room_number = 3 [(google.api.field_behavior) = REQUIRED];
  // Сообщение об ошибке
  string message = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача на добавление Sl3 ключей на устройство.
// Очередь key.device.add_sl3_rfids
message AddSl3RfidsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключ sl3
  message Sl3Rfid {
    // Идентификатор ключа
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер помещения к которому прявязан ключ
    string room_number = 2 [(google.api.field_behavior) = REQUIRED];
    // Значение ключа
    string key = 3 [(google.api.field_behavior) = REQUIRED];
    // Секрет
    string key_secret = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Ключи
  repeated Sl3Rfid sl3_rfids = 7 [(google.api.field_behavior) = REQUIRED];
}

// Задача на добавление ключей на устройство.
// Очередь key.device.add_rfids
message AddRfidsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Rfid rfids = 7 [(google.api.field_behavior) = REQUIRED];
}

// Задача на добавление кодов на устройство.
// Очередь key.device.add_codes
message AddCodesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Code codes = 7 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на успешное на добавление ключей на устройство.
// Очередь key.device.add_rfids_success
message AddRfidsSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Rfid rfids = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на неуспешное на добавление ключей на устройство.
// Очередь key.device.add_rfids_fail
message AddRfidsFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ошибки ключей
  repeated RfidError rfid_errors = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на успешное на добавление кодов на устройство.
// Очередь key.device.add_codes_success
message AddCodesSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // коды
  repeated Code codes = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на неуспешное на добавление кодов на устройство.
// Очередь key.device.add_codes_fail
message AddCodesFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ошибки кодов
  repeated CodeError code_errors = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача на удаление Sl3 ключей с устройства.
// Очередь key.device.delete_sl3_rfids
message DeleteSl3RfidsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключ sl3
  message Sl3Rfid {
    // Идентификатор ключа
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Номер помещения к которому прявязан ключ
    string room_number = 2 [(google.api.field_behavior) = REQUIRED];
    // Значение ключа
    string key = 3 [(google.api.field_behavior) = REQUIRED];
    // Секрет
    string key_secret = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Ключи
  repeated Sl3Rfid sl3_rfids = 7 [(google.api.field_behavior) = REQUIRED];
  // При передаче этого флага в true, ответное сообщение не будет получено
  google.protobuf.BoolValue is_answer_unnecessary = 8;
}

// Задача на удаление ключей с устройства.
// Очередь key.device.delete_rfids
message DeleteRfidsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Rfid rfids = 7 [(google.api.field_behavior) = REQUIRED];
  // При передаче этого флага в true, ответное сообщение не будет получено
  google.protobuf.BoolValue is_answer_unnecessary = 8;
}

// Задача на удаление кодов с устройства.
// Очередь key.device.delete_codes
message DeleteCodesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Code codes = 7 [(google.api.field_behavior) = REQUIRED];
  // При передаче этого флага в true, ответное сообщение не будет получено
  google.protobuf.BoolValue is_answer_unnecessary = 8;
}

// Задача ответ на успешное удаление ключей с устройства.
// Очередь key.device.delete_rfids_success
message DeleteRfidsSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ключи
  repeated Rfid rfids = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на неуспешное удаление ключей с устройства.
// Очередь key.device.delete_rfids_fail
message DeleteRfidsFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ошибки ключей
  repeated RfidError rfid_errors = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на успешное удаление кодов с устройства.
// Очередь key.device.delete_codes_success
message DeleteCodesSuccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // коды
  repeated Code codes = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача ответ на неуспешное удаление кодов с устройства.
// Очередь key.device.delete_codes_fail
message DeleteCodesFailTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Ошибки кодов
  repeated CodeError code_errors = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача на открытие точки доступа.
// Очередь key.device.open_access_point
message OpenAccessPointTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Номер реле
  google.protobuf.Int32Value relay_index = 3;
  // Задержка в секундах
  google.protobuf.Int32Value delay = 4;
  // ГРЗ авто
  google.protobuf.StringValue car_number = 5;
  // Тип ТС
  google.protobuf.StringValue vehicle = 6;
  // Наименование курьерской компании
  google.protobuf.StringValue courier_company_name = 7;
  // Номер заказа
  google.protobuf.StringValue order_number = 8;
  // Идентификатор курьера
  google.protobuf.StringValue courier_id = 9;
}

// Задача на открытие устройства.
// Очередь key.device.open
message OpenTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Модель
  string model = 2 [(google.api.field_behavior) = REQUIRED];
  // Хост
  string host = 3 [(google.api.field_behavior) = REQUIRED];
  // Имя пользователя
  string username = 4;
  // Пароль
  string password = 5;
  // Идентификатор устройства
  int32 device_id = 6 [(google.api.field_behavior) = REQUIRED];
  // Номер реле
  google.protobuf.Int32Value relay_index = 7;
  // Задержка в секундах.
  // Если не передано, то полставляется значение по умолчанию (5)
  google.protobuf.Int32Value delay = 8;
}

// Задача на удаление sip-аккаунта.
// Очередь key.device.delete_sip_account
message DeleteSipAccountTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Дата и время удаления устройства
  google.protobuf.Timestamp deleted_at = 3 [(google.api.field_behavior) = REQUIRED];
  // Sip-login устройства
  string sip_login = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача на создание доступа к устройству.
// Очередь key.device.create_device_access
message CreateDeviceAccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификаторы устройства.
  // # Диапазон: 0..2147483647
  repeated int32 device_ids = 2 [(google.api.field_behavior) = REQUIRED];
  // Тип субъекта доступа
  DeviceAccess.AccessorType device_access_accessor_type = 3 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор субъекта доступа.
  // # Диапазон: 1..36
  string accessor_id = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача на удаление доступа к устройству.
// Очередь key.device.delete_device_access
message DeleteDeviceAccessTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
 // Идентификаторы устройства.
  // # Диапазон: 0..2147483647
  repeated int32 device_ids = 2 [(google.api.field_behavior) = REQUIRED];
  // Тип субъекта доступа
  DeviceAccess.AccessorType device_access_accessor_type = 3 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор субъекта доступа.
  // # Диапазон: 1..36
  string accessor_id = 4 [(google.api.field_behavior) = REQUIRED];
}
