openapi: 3.0.3
info:
  title: Device API
  version: 1.0.1781007309112
tags:
  - name: capability
    description: Методы capability. Требуют авторизацию
  - name: code
    description: Методы code. Требуют авторизацию
  - name: concierge
    description: Методы concierge. Требуют авторизацию
  - name: dtmf
    description: Методы dtmf. Требуют авторизацию
  - name: encryption_profile
    description: Методы encryption_profile. Требуют авторизацию
  - name: facerec
    description: Методы facerec. Требуют авторизацию
  - name: ftp
    description: Методы ftp. Требуют авторизацию
  - name: gate
    description: Методы gate. Требуют авторизацию
  - name: ntp
    description: Методы ntp. Требуют авторизацию
  - name: reader
    description: Методы reader. Требуют авторизацию
  - name: relay
    description: Методы relay. Требуют авторизацию
  - name: rfid
    description: Методы rfid. Требуют авторизацию
  - name: room
    description: Методы room. Требуют авторизацию
  - name: rtsp
    description: Методы rtsp. Требуют авторизацию
  - name: sac
    description: Методы sac. Требуют авторизацию
  - name: safe_city
    description: Методы safe_city. Требуют авторизацию
  - name: sip
    description: Методы sip. Требуют авторизацию
  - name: sos
    description: Методы sos. Требуют авторизацию
  - name: syslog
    description: Методы syslog. Требуют авторизацию
  - name: ticker
    description: Методы ticker. Требуют авторизацию
  - name: update
    description: Методы update. Требуют авторизацию
  - name: user
    description: Методы user. Требуют авторизацию
  - name: video_channel
    description: Методы video_channel. Требуют авторизацию
  - name: system(auth)
    description: Методы system. Требуют авторизацию
paths:
  /device/api/v1/capability/list:
    get:
      summary: Метод получения возможностей устройства
      operationId: CapabilityService_GetCapabilityList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetCapabilityListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - capability
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/code:
    post:
      summary: Метод создания кода доступа
      operationId: CodeService_SaveCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveCodeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveCodeResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveCodeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveCodeRequest"
        required: true
      tags:
        - code
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/code/count:
    get:
      summary: Метод получения количества кодов доступа
      operationId: CodeService_GetCodeCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetCodeCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - code
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/code/list:
    get:
      summary: Метод получения списка кодов доступа
      operationId: CodeService_GetCodeList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetCodeListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
      tags:
        - code
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления списка кодов доступа
      operationId: CodeService_DeleteCodeList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteCodeListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - code
      security:
        - basicAuth: []
      parameters: []
    post:
      summary: Метод создания списка кодов доступа
      operationId: CodeService_SaveCodeList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveCodeListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveCodeListRequest"
        required: true
      tags:
        - code
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/code/{code}":
    get:
      summary: Метод получения кода доступа
      operationId: CodeService_GetCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetCodeResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: code
          description: Код доступа
          in: path
          required: true
          schema:
            type: string
      tags:
        - code
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления одного кода доступа
      operationId: CodeService_DeleteCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteCodeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteCodeResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteCodeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: code
          description: Код доступа
          in: path
          required: true
          schema:
            type: string
      tags:
        - code
      security:
        - basicAuth: []
  /device/api/v1/concierge/settings:
    get:
      summary: Метод получения настроек Concierge
      operationId: ConciergeSettingsService_GetConciergeSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetConciergeSettingsResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - concierge
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек Concierge
      operationId: ConciergeSettingsService_EditConciergeSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditConciergeSettingsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditConciergeSettingsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditConciergeSettingsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1ConciergeSettings"
        description: Настройки Concierge
        required: true
      tags:
        - concierge
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/dtmf/settings:
    get:
      summary: Метод получения настроек DTMF
      operationId: DtmfSettingsService_GetDtmfSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetDtmfSettingsResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - dtmf
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек DTMF
      operationId: DtmfSettingsService_EditDtmfSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditDtmfSettingsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditDtmfSettingsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditDtmfSettingsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1DtmfSettings"
        description: Настройки DTMF
        required: true
      tags:
        - dtmf
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/encryption_profile:
    post:
      summary: Метод создания сущности EncryptionProfile
      operationId: EncryptionProfileService_SaveEncryptionProfile
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveEncryptionProfileResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveEncryptionProfileResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveEncryptionProfileResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveEncryptionProfileRequest"
        required: true
      tags:
        - encryption_profile
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/encryption_profile/list:
    get:
      summary: Метод получения списка сущностей EncryptionProfile по фильтру
      operationId: EncryptionProfileService_GetEncryptionProfileList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetEncryptionProfileListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.text
          description: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            Поиск производится по полям:
            # - Наименование
          in: query
          required: false
          schema:
            type: string
      tags:
        - encryption_profile
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления списка сущностей EncryptionProfile по фильтру
      operationId: EncryptionProfileService_DeleteEncryptionProfileList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileListResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileListResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileListResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - encryption_profile
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/encryption_profile/{id}":
    get:
      summary: Метод получения единичной сущности EncryptionProfile по ключу
      operationId: EncryptionProfileService_GetEncryptionProfile
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetEncryptionProfileResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор.
            Тип: Guid
          in: path
          required: true
          schema:
            type: string
      tags:
        - encryption_profile
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления единичной сущности EncryptionProfile по ключу
      operationId: EncryptionProfileService_DeleteEncryptionProfile
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteEncryptionProfileResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор.
            Тип: Guid
          in: path
          required: true
          schema:
            type: string
      tags:
        - encryption_profile
      security:
        - basicAuth: []
  /device/api/v1/facerec:
    get:
      summary: Метод получения настроек Face Recognition
      operationId: FacerecService_GetFacerec
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetFacerecResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - facerec
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек Face Recognition
      operationId: FacerecService_EditFacerec
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFacerecResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFacerecResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFacerecResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Facerec"
        description: Настройки Face Recognition
        required: true
      tags:
        - facerec
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/ftp:
    get:
      summary: Метод получения настроек FTP
      operationId: FtpService_GetFtp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetFtpResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - ftp
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек FTP
      operationId: FtpService_EditFtp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFtpResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFtpResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditFtpResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Ftp"
        description: Настройки FTP
        required: true
      tags:
        - ftp
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/ftp/backup:
    post:
      summary: Создать бэкап и положить на FTP папку
      operationId: FtpService_PostFtpBackup
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostFtpBackupRequest"
        required: true
      tags:
        - ftp
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/ftp/backup/apply:
    post:
      summary: Скачать бэкап из FTP папки и применить
      operationId: FtpService_PostFtpBackupApply
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupApplyResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupApplyResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostFtpBackupApplyResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostFtpBackupApplyRequest"
        required: true
      tags:
        - ftp
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/gate/mode:
    get:
      summary: Метод получения Gate режима
      operationId: GateModeService_GetGateMode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGateModeResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - gate
      security:
        - basicAuth: []
      parameters: []
    post:
      summary: Метод редактирования Gate режима
      operationId: GateModeService_SaveGateMode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveGateModeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveGateModeResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveGateModeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveGateModeRequest"
        required: true
      tags:
        - gate
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/ntp:
    get:
      summary: Метод получения настроек NTP
      operationId: NtpService_GetNtp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetNtpResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - ntp
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек NTP
      operationId: NtpService_EditNtp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditNtpResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditNtpResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditNtpResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Ntp"
        description: Настройки Ntp-сервера
        required: true
      tags:
        - ntp
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/reader/{data.id}":
    patch:
      summary: Метод редактирования считывателя
      operationId: ReaderService_EditReader
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditReaderResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditReaderResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditReaderResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: data.id
          description: |-
            Идентификатор.
            id=100 - Считыватель внутренний.
            id=1 - Считыватель внешний №1.
            id=2 - Считыватель внешний №2 и тд
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                encryptionProfileIds:
                  type: array
                  items:
                    type: integer
                    format: int32
                  title: Список идентификаторов профилей шифрования
                relayIndexes:
                  type: array
                  items:
                    type: integer
                    format: int32
                  title: |-
                    Список идентификаторов реле.
                    Диапазон: 1..64
                isNoneSecureMode:
                  type: boolean
                  title: Считыватель работает не в безопасном режиме (по UID)
                directionType:
                  title: Направление
                  allOf:
                    - $ref: "#/components/schemas/ReaderDirectionType"
              title: Считыватель
              required:
                - encryptionProfileIds
                - relayIndexes
                - isNoneSecureMode
        description: Считыватель
        required: true
      tags:
        - reader
      security:
        - basicAuth: []
  "/device/api/v1/reader/{id}":
    get:
      summary: Метод получения считывателя
      operationId: ReaderService_GetReader
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetReaderResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор.
            id=100 - Считыватель внутренний.
            id=1 - Считыватель внешний №1.
            id=2 - Считыватель внешний №2 и тд
          in: path
          required: true
          schema:
            type: integer
            format: int32
      tags:
        - reader
      security:
        - basicAuth: []
  /device/api/v1/relay/dtmf/list:
    get:
      summary: Метод получения настроек DTMF реле
      operationId: RelayService_GetRelayDtmfList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRelayDtmfListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - relay
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/relay/open/list:
    get:
      summary: Метод получения настроек открытия реле
      operationId: RelayService_GetRelayOpenList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRelayOpenListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - relay
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/relay/status/list:
    get:
      summary: Метод получения статусов реле устройства
      operationId: RelayService_GetRelayStatusList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRelayStatusListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - relay
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/relay/{data.relayIndex}/props/dtmf":
    patch:
      summary: Метод редактирования настроек DTMF реле
      operationId: RelayService_EditRelayPropsDtmf
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsDtmfResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsDtmfResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsDtmfResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: data.relayIndex
          description: |-
            Индекс реле.
            Диапазон: 1..32767
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                dtmfCode:
                  type: string
                  example: 5
                  title: |-
                    DTMF код.
                    Для разных реле допускается одинаковый DTMF код.
                    Один символ из 0,1,2,3,4,5,6,7,8,9,*,#
                  maxLength: 1
                  minLength: 1
                  pattern: ^[0-9*#]{1,1}$
              title: Настройки DTMF реле
        description: Настройки DTMF реле
        required: true
      tags:
        - relay
      security:
        - basicAuth: []
  "/device/api/v1/relay/{data.relayIndex}/props/open":
    patch:
      summary: Метод редактирования настроек открытия реле
      operationId: RelayService_EditRelayPropsOpen
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsOpenResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsOpenResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditRelayPropsOpenResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: data.relayIndex
          description: |-
            Индекс реле.
            Диапазон: 1..32767
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                lockType:
                  title: Тип замка
                  allOf:
                    - $ref: "#/components/schemas/RelayOpenLockType"
                openTimeGeneral:
                  type: integer
                  format: int32
                  example: 10
                  title: |-
                    Общее время открытия.
                    Диапазон: 1..200
                  maximum: 200
                  minimum: 1
                openTimeEmergency:
                  type: integer
                  format: int32
                  example: 10
                  title: |-
                    Время открытия в секундах при экстренном оповещении.
                    При 0 - до конца экстренного оповещения.
                    Диапазон: 0..3600
                  maximum: 3600
              title: Настройки реле
        description: Настройки реле
        required: true
      tags:
        - relay
      security:
        - basicAuth: []
  "/device/api/v1/relay/{relayIndex}/close":
    post:
      summary: |-
        Метод закрытия реле.
        Закрытие реле принудительно без учета времени открытия.
        Отмена режима постоянного открытия
      operationId: RelayService_PostRelayClose
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayCloseResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayCloseResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayCloseResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: relayIndex
          description: |-
            Индекс реле.
            Диапазон: 1..32767
          in: path
          required: true
          schema:
            type: integer
            format: int32
      tags:
        - relay
      security:
        - basicAuth: []
  "/device/api/v1/relay/{relayIndex}/open":
    post:
      summary: Метод открытия реле
      operationId: RelayService_PostRelayOpen
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: relayIndex
          description: |-
            Индекс реле.
            Диапазон: 1..32767
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                currentOpenTime:
                  type: integer
                  format: int32
                  example: 10
                  title: >-
                    Задержка в секундах.

                    Если не передано, используется установленное значение времени открытия из настроек.

                    Диапазон: 1..200
                  maximum: 200
                  minimum: 1
              title: Запрос открытия реле
        required: true
      tags:
        - relay
      security:
        - basicAuth: []
  "/device/api/v1/relay/{relayIndex}/open_permanently":
    post:
      summary: Метод открытия реле без дальнейшего закрытия
      operationId: RelayService_PostRelayOpenPermanently
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenPermanentlyResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenPermanentlyResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostRelayOpenPermanentlyResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: relayIndex
          description: |-
            Индекс реле.
            Диапазон: 1..32767
          in: path
          required: true
          schema:
            type: integer
            format: int32
      tags:
        - relay
      security:
        - basicAuth: []
  /device/api/v1/rfid:
    post:
      summary: Метод редактирования сущности Rfid
      operationId: RfidService_SaveRfid
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRfidResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRfidResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRfidResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveRfidRequest"
        required: true
      tags:
        - rfid
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/rfid/count:
    get:
      summary: Метод получения количества сущностей Rfid по фильтру
      operationId: RfidService_GetRfidCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRfidCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - rfid
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/rfid/list:
    get:
      summary: Метод получения списка сущностей Rfid по фильтру
      operationId: RfidService_GetRfidList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRfidListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
      tags:
        - rfid
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления списка сущностей Rfid по фильтру
      operationId: RfidService_DeleteRfidList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRfidListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - rfid
      security:
        - basicAuth: []
      parameters: []
    post:
      summary: Метод редактирования списка сущностей Rfid
      operationId: RfidService_SaveRfidList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRfidListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveRfidListRequest"
        required: true
      tags:
        - rfid
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/rfid/{id}":
    get:
      summary: Метод получения единичной сущности Rfid по ключу
      operationId: RfidService_GetRfid
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRfidResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор UID [hex 14]
          in: path
          required: true
          schema:
            type: string
      tags:
        - rfid
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления единичной сущности Rfid по ключу
      operationId: RfidService_DeleteRfid
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRfidResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRfidResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRfidResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор UID [hex 14]
          in: path
          required: true
          schema:
            type: string
      tags:
        - rfid
      security:
        - basicAuth: []
  /device/api/v1/room:
    post:
      summary: |-
        Метод сохранения настроек квартиры.
        Поддерживает создание и обновление
      operationId: RoomService_SaveRoom
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRoomResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRoomResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRoomResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveRoomRequest"
        required: true
      tags:
        - room
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/room/count:
    get:
      summary: Метод получения количества квартир
      operationId: RoomService_GetRoomCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRoomCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - room
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/room/list:
    get:
      summary: Метод получения списка настроек квартир
      operationId: RoomService_GetRoomList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRoomListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
      tags:
        - room
      security:
        - basicAuth: []
    delete:
      summary: |-
        Метод удаления списка настроек квартиры.
        При отсутствующем или пустом фильтре удаляются все квартиры
      operationId: RoomService_DeleteRoomList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomListResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomListResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomListResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.roomNumbers
          description: |-
            По номерам квартир.
            При пустом массиве удалятся все квартиры
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
      tags:
        - room
      security:
        - basicAuth: []
    post:
      summary: Метод сохранения списка настроек квартиры
      operationId: RoomService_SaveRoomList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRoomListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveRoomListRequest"
        required: true
      tags:
        - room
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/room/{roomNumber}":
    get:
      summary: Метод получения настроек квартиры
      operationId: RoomService_GetRoom
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRoomResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: roomNumber
          description: Номер квартиры
          in: path
          required: true
          schema:
            type: string
      tags:
        - room
      security:
        - basicAuth: []
    delete:
      summary: Метод удаления настроек квартиры
      operationId: RoomService_DeleteRoom
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteRoomResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: roomNumber
          description: Номер квартиры
          in: path
          required: true
          schema:
            type: string
      tags:
        - room
      security:
        - basicAuth: []
  /device/api/v1/rtsp:
    get:
      summary: Метод получения настроек RTSP
      operationId: RtspService_GetRtsp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetRtspResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - rtsp
      security:
        - basicAuth: []
      parameters: []
    post:
      summary: Метод редактирования настроек RTSP
      operationId: RtspService_SaveRtsp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRtspResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRtspResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveRtspResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveRtspRequest"
        required: true
      tags:
        - rtsp
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/sac:
    get:
      summary: Метод получения настроек Smart Auto Collect
      operationId: SacService_GetSac
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSacResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - sac
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек Smart Auto Collect
      operationId: SacService_EditSac
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSacResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSacResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSacResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Sac"
        description: Настройки Smart Auto Collect
        required: true
      tags:
        - sac
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/safe_city/emergency/start:
    post:
      summary: >-
        Старт оповещения.

        Где Tick - один цикл оповещения на одном или двух направлениях (трубка, динамик или трубка и динамик).

        playbacks_per_tick - Количество воспроизведений файла в каждом цикле оповещения на одном направлении (трубка или динамик).

        tick_count - Количество воспроизведений циклов оповещения.

        Длительность оповещения = tick_count * (Х * playbacks_per_tick (трубка) + Х * playbacks_per_tick (динамик)).

        total_duration - Максимальная общая длительность оповещения. По истечении total_duration секунд оповещение прекращается независимо от количества циклов
      operationId: SafeCityEmergencyService_PostSafeCityEmergencyStart
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostSafeCityEmergencyStartResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostSafeCityEmergencyStartResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostSafeCityEmergencyStartResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostSafeCityEmergencyStartRequest"
        required: true
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/safe_city/emergency/status:
    get:
      summary: Получение статуса оповещения
      operationId: SafeCityEmergencyService_GetSafeCityEmergencyStatus
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSafeCityEmergencyStatusResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/safe_city/emergency/stop:
    post:
      summary: Прекращение оповещения
      operationId: SafeCityEmergencyService_PostSafeCityEmergencyStop
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostSafeCityEmergencyStopResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostSafeCityEmergencyStopRequest"
        required: true
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/safe_city/emergency_file:
    post:
      summary: >-
        Метод загрузки файла на устройство.

        Syslog: EVENT:000: Upload Emergency File: File size nnn byte: File Duration nnn sec
      operationId: SafeCityEmergencyFileService_SaveSafeCityEmergencyFile
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveSafeCityEmergencyFileResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveSafeCityEmergencyFileRequest"
        required: true
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/safe_city/emergency_file/list:
    get:
      summary: >-
        Метод получения списка файлов оповещения.

        В ответе только массив file_name, необязательный параметр content не присутствует
      operationId: SafeCityEmergencyFileService_GetSafeCityEmergencyFileList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSafeCityEmergencyFileListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/safe_city/emergency_file/{fileName}":
    delete:
      summary: Метод удаления единичной сущности SafeCityEmergencyFile по ключу
      operationId: SafeCityEmergencyFileService_DeleteSafeCityEmergencyFile
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteSafeCityEmergencyFileResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteSafeCityEmergencyFileResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteSafeCityEmergencyFileResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: fileName
          description: Имя файла
          in: path
          required: true
          schema:
            type: string
      tags:
        - safe_city
      security:
        - basicAuth: []
  /device/api/v1/safe_city/osd:
    get:
      summary: Метод получения настроек OSD
      operationId: SafeCityOsdService_GetSafeCityOsd
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSafeCityOsdResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек OSD
      operationId: SafeCityOsdService_EditSafeCityOsd
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSafeCityOsdResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSafeCityOsdResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSafeCityOsdResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SafeCityOsd"
        description: Настройки OSD
        required: true
      tags:
        - safe_city
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/sip/account/list:
    get:
      summary: Метод получения списка Sip-аккаунтов
      operationId: SipService_GetSipAccountList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipAccountListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - sip
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/sip/account/status/list:
    get:
      summary: Метод получения статусов регистрации Sip-аккаунтов
      operationId: SipService_GetSipAccountStatusList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipAccountStatusListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - sip
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/sip/account/{data.accountId}":
    patch:
      summary: Метод редактирования Sip-аккаунта
      operationId: SipService_EditSipAccount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipAccountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipAccountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipAccountResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: data.accountId
          description: ID Sip-аккаунта
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: "0018155318002"
                  title: Имя
                number:
                  type: string
                  example: "45464738"
                  title: Номер
                user:
                  type: string
                  example: admin
                  title: Имя пользователя
                password:
                  type: string
                  example: pwd_admin
                  title: >-
                    Пароль.

                    Не возвращается с сервера.

                    TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
                regServerAddress:
                  type: string
                  example: reg.acme.io:5060
                  title: |-
                    Адрес REG-сервера.
                    Сетевой адрес и порт.
                    Пример: 192.168.0.1:5060, reg.acme.io:5060
                  minLength: 5
                sipServerAddress:
                  type: string
                  example: sip.acme.io:5060
                  title: |-
                    Адрес SIP-сервера.
                    Сетевой адрес и порт.
                    Пример: 192.168.0.1:5060, sip.acme.io:5060
                  minLength: 5
                sipProxyAddress:
                  type: string
                  example: proxy.acme.io:5060
                  title: |-
                    Адрес SIP-прокси.
                    Сетевой адрес и порт.
                    Пример: 192.168.0.1:5060, proxy.acme.io:5060
                  minLength: 5
              title: Sip-аккаунт
        description: Sip-аккаунт
        required: true
      tags:
        - sip
      security:
        - basicAuth: []
  /device/api/v1/sip/timeout/settings:
    get:
      summary: Метод получения настроек максимального времени общения и дозвона
      operationId: SipService_GetSipTimeoutSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipTimeoutSettingsResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - sip
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек максимального времени общения и дозвона
      operationId: SipService_EditSipTimeoutSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipTimeoutSettingsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipTimeoutSettingsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSipTimeoutSettingsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SipTimeoutSettings"
        description: Настройки максимального времени общения и дозвона
        required: true
      tags:
        - sip
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/sos:
    get:
      summary: Метод получения настроек SOS
      operationId: SosService_GetSos
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSosResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - sos
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек SOS
      operationId: SosService_EditSos
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSosResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSosResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSosResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Sos"
        description: Настройки SOS
        required: true
      tags:
        - sos
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/syslog/settings:
    get:
      summary: Метод получения настроек Syslog-сервера
      operationId: SyslogSettingsService_GetSyslogSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSyslogSettingsResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - syslog
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек Syslog-сервера
      operationId: SyslogSettingsService_EditSyslogSettings
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSyslogSettingsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSyslogSettingsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditSyslogSettingsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SyslogSettings"
        description: Настройки Syslog-сервера
        required: true
      tags:
        - syslog
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/system/info:
    get:
      summary: Метод получения общей информации об устройстве
      operationId: SystemService_GetSystemInfo
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSystemInfoResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - system(auth)
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/system/reboot:
    post:
      summary: Метод удаленной перезагрузки
      operationId: SystemService_PostSystemReboot
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostSystemRebootResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostSystemRebootRequest"
        required: true
      tags:
        - system(auth)
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/ticker:
    get:
      summary: Метод получения настроек Ticker
      operationId: TickerService_GetTicker
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetTickerResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - ticker
      security:
        - basicAuth: []
      parameters: []
    patch:
      summary: Метод редактирования настроек Ticker
      operationId: TickerService_EditTicker
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditTickerResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditTickerResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditTickerResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1Ticker"
        description: Настройки Ticker
        required: true
      tags:
        - ticker
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/update/apply:
    post:
      summary: Запустить обновление домофона
      operationId: UpdateService_PostUpdateApply
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUpdateApplyResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostUpdateApplyRequest"
        required: true
      tags:
        - update
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/update/download:
    post:
      summary: Скачать прошивку для обновления
      operationId: UpdateService_PostUpdateDownload
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUpdateDownloadResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUpdateDownloadResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUpdateDownloadResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostUpdateDownloadRequest"
        required: true
      tags:
        - update
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/user:
    post:
      summary: Метод создания/редактирования сущности User
      operationId: UserService_SaveUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1SaveUserResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1SaveUserRequest"
        required: true
      tags:
        - user
      security:
        - basicAuth: []
      parameters: []
  /device/api/v1/user/list:
    get:
      summary: Метод получения списка сущностей User по фильтру
      operationId: UserService_GetUserList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - user
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/user/{username}":
    delete:
      summary: Метод удаления единичной сущности User по ключу
      operationId: UserService_DeleteUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: username
          description: Имя пользователя
          in: path
          required: true
          schema:
            type: string
      tags:
        - user
      security:
        - basicAuth: []
  "/device/api/v1/user/{username}/name/replace":
    post:
      summary: Метод замены имени пользователя
      operationId: UserService_PostUserNameReplace
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserNameReplaceResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: username
          description: Имя пользователя
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  title: Поле на замену
                  allOf:
                    - $ref: "#/components/schemas/v1PostUserNameReplaceRequestReplaceTo"
              title: Запрос замены имени пользователя
              required:
                - data
        required: true
      tags:
        - user
      security:
        - basicAuth: []
  "/device/api/v1/user/{username}/password/replace":
    post:
      summary: Метод замены пароля пользователя
      operationId: UserService_PostUserPasswordReplace
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserPasswordReplaceResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: username
          description: Имя пользователя
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  title: Поле на замену
                  allOf:
                    - $ref: "#/components/schemas/v1PostUserPasswordReplaceRequestReplaceTo"
              title: Запрос замены пароля пользователя
              required:
                - data
        required: true
      tags:
        - user
      security:
        - basicAuth: []
  "/device/api/v1/user/{username}/permission/replace":
    post:
      summary: |-
        Метод замены пароля пользователя.
        Будут изменены только явно переданные в data.permission разрешения
      operationId: UserService_PostUserPermissionReplace
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserPermissionReplaceResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: username
          description: Имя пользователя
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  title: Поле на замену
                  allOf:
                    - $ref: "#/components/schemas/v1PostUserPermissionReplaceRequestReplaceTo"
              title: Запрос замены разрешений пользователя
              required:
                - data
        required: true
      tags:
        - user
      security:
        - basicAuth: []
  /device/api/v1/video_channel/list:
    get:
      summary: Метод получения списка сущностей VideoChannel по фильтру
      operationId: VideoChannelService_GetVideoChannelList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetVideoChannelListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - video_channel
      security:
        - basicAuth: []
      parameters: []
  "/device/api/v1/video_channel/{data.chanelNumber}":
    patch:
      summary: Метод редактирования единичной сущности VideoChannel по ключу
      operationId: VideoChannelService_EditVideoChannel
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditVideoChannelResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditVideoChannelResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1EditVideoChannelResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: data.chanelNumber
          description: Порядковый номер видеоконфига
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                isEnabled:
                  type: boolean
                  example: true
                  title: Флаг активности
                resolutionType:
                  title: Тип разрешения видео
                  allOf:
                    - $ref: "#/components/schemas/VideoChannelResolutionType"
                formatType:
                  title: Формат видео
                  allOf:
                    - $ref: "#/components/schemas/VideoChannelFormatType"
                profileType:
                  title: Профиль
                  allOf:
                    - $ref: "#/components/schemas/VideoChannelProfileType"
                fps:
                  type: integer
                  format: int32
                  example: 25
                  title: Частота кадров
                  maximum: 30
                  minimum: 1
                gop:
                  type: integer
                  format: int32
                  example: 25
                  title: Периодичность опорного кадра
                  maximum: 200
                  minimum: 1
                flowControlModeType:
                  title: Режим FlowControlModeType
                  allOf:
                    - $ref: "#/components/schemas/VideoChannelFlowControlModeType"
                biterate:
                  type: integer
                  format: int32
                  example: 100
                  title: Целевая скорость потока, килобит
                  maximum: 16000
                  minimum: 100
                isRtspAudio:
                  type: boolean
                  example: true
                  title: Флаг rtsp_audio
                isUsedForSip:
                  type: boolean
                  example: true
                  title: Флаг use for sip
              title: Настройки видеоконфига
              required:
                - isEnabled
        description: Настройки видеоконфига
        required: true
      tags:
        - video_channel
      security:
        - basicAuth: []
components:
  schemas:
    DeletingErrorEncryptionProfileInUse:
      type: object
      title: Профиль шифрования используется на устройстве
    EmergencyScenarioPlayOrderType:
      type: string
      enum:
        - HANDSET_ONLY
        - SPEAKER_ONLY
        - HANDSET_FIRST
        - SPEAKER_FIRST
        - HANDSET_AND_SPEAKER
      description: >-
        - PLAY_ORDER_TYPE_UNKNOWN: Значение не указано
         - HANDSET_ONLY: Только на аналоговые трубки
         - SPEAKER_ONLY: Tолько на динамик домофона
         - HANDSET_FIRST: Сначала на аналоговые трубки проигрываем заданное количество тактов, затем на динамик домофона
         - SPEAKER_FIRST: Сначала на динамик домофона проигрываем заданное количество тактов, затем на аналоговые трубки
         - HANDSET_AND_SPEAKER: Одновременно на аналоговые трубки проигрываем заданное количество тактов, затем на динамик домофона
      title: |-
        Тип проигрывания.
        # Тип: byte
    EncryptionProfileDeletingError:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор профиля шифрования, к которому относится ошибка.
            Тип: Guid
        encryptionProfileInUse:
          title: Профиль используется на устройстве
          allOf:
            - $ref: "#/components/schemas/DeletingErrorEncryptionProfileInUse"
      title: Ошибка удаления
      required:
        - id
    ErrorSoundFileNotFound:
      type: object
      title: Звуковой файл не найден
    GetSafeCityEmergencyStatusResponseCurrentStatus:
      type: object
      properties:
        isRunning:
          type: boolean
          title: Признак работающего оповещения в текущий момент
        emergencyScenarioPlayOrderType:
          title: Тип проигрывания
          allOf:
            - $ref: "#/components/schemas/EmergencyScenarioPlayOrderType"
        fileName:
          type: string
          example: Happy_new_year.wav
          title: Имя файла
      title: Статус оповещения
      required:
        - isRunning
    GetSipAccountStatusListResponseSipStatus:
      type: object
      properties:
        sipAccountId:
          type: string
          example: "1454647"
          title: ID Sip-аккаунта
        stateType:
          title: Статус регистрации Sip
          allOf:
            - $ref: "#/components/schemas/GetSipAccountStatusListResponseSipStatusStateType"
        lastAttemptRegisterAt:
          type: integer
          format: UnixTime
          example: 1742560844
          title: Дата последней попытки регистрации UnixTime
      title: Статус аккаунтов Sip
      required:
        - sipAccountId
    GetSipAccountStatusListResponseSipStatusStateType:
      type: string
      enum:
        - REGISTERING
        - REGISTERED
        - UNREGISTERED
        - REGISTRATION_FAILED
        - TIMEOUT
        - DISABLED
      description: >-
        - STATE_TYPE_UNKNOWN: Значение не указано
         - REGISTERING: Клиент отправил REGISTER запрос, но ответ от сервера ещё не получен.
        Идёт попытка регистрации
         - REGISTERED: Успешная регистрация.
        SIP-сервер подтвердил регистрацию, клиент готов принимать звонки
         - UNREGISTERED: Клиент отключился или не регистрировался.
        Возможные причины: Клиент отправил UNREGISTER; Истек срок регистрации (expires)
         - REGISTRATION_FAILED: Ошибка при попытке регистрации.
        Возможные причины: Неверный логин/пароль; SIP-сервер недоступен; Ошибка в конфигурации (порт, протокол, IP)
         - TIMEOUT: Нет ответа от сервера в течение времени ожидания.
        Возможные причины: Проблемы с сетью; SIP-сервер не отвечает; Нет ответа от сервера в течение времени ожидания
         - DISABLED: SIP клиент остановлен вручную или отключён по конфигурации.
        Не выполняется даже попытка регистрации
      title: Тип состояния Sip-аккаунта
    HouseInviteTemplateType:
      type: string
      enum:
        - H4LZ_F4LZ
        - H4LZ_F4
        - H4_F4LZ
      description: >-
        - INVITE_TEMPLATE_TYPE_UNKNOWN: Значение не указано
         - H4LZ_F4LZ: 4 символа для номера дома с лидирующими нулями, 4 символа для номера квартиры с лидирующими нулями.
        Номера дома и квартиры при звонке подставляются в виде: 00120123@sip.acme.io
         - H4LZ_F4: 4 символа для номера дома с лидирующими нулями, 4 или меньше символа для номера квартиры.
        Номера дома и квартиры при звонке подставляются в виде: 0012123@sip.acme.io
         - H4_F4LZ: 4 или меньше символа для номера дома, 4 символа для номера квартиры с лидирующими нулями.
        Номера дома и квартиры при звонке подставляются в виде: 120123@sip.acme.io
      title: Варианты подстановки номера дома и квартиры в SIP Invite
    HouseRoomRange:
      type: object
      properties:
        firstRoomNumber:
          type: string
          example: "234"
          title: Начало диапазона включительно
        lastRoomNumber:
          type: string
          example: "1234"
          title: Конец диапазона включительно
      title: Диапазон квартир
      required:
        - firstRoomNumber
        - lastRoomNumber
    NtpTimeZoneType:
      type: string
      enum:
        - GMTM1100_MIDWAY
        - GMTM1100_NIUE
        - GMTM1000_ADAK
        - GMTM1000_HONOLULU
        - GMTM1000_JOHNSTON
        - GMTM1000_RAROTONGA
        - GMTM1000_TAHITI
        - GMTM930_MARQUESAS
        - GMTM900_ANCHORAGE
        - GMTM900_JUNEAU
        - GMTM900_METLAKATLA
        - GMTM900_NOME
        - GMTM900_SITKA
        - GMTM900_YAKUTAT
        - GMTM900_GAMBIER
        - GMTM800_LOS_ANGELES
        - GMTM800_SANTA_ISABEL
        - GMTM800_TIJUANA
        - GMTM800_VANCOUVER
        - GMTM800_PITCAIRN
        - GMTM700_BOISE
        - GMTM700_CAMBRIDGE_BAY
        - GMTM700_CHIHUAHUA
        - GMTM700_CRESTON
        - GMTM700_DAWSON
        - GMTM700_DAWSON_CREEK
        - GMTM700_DENVER
        - GMTM700_EDMONTON
        - GMTM700_FORT_NELSON
        - GMTM700_HERMOSILLO
        - GMTM700_INUVIK
        - GMTM700_MAZATLAN
        - GMTM700_OJINAGA
        - GMTM700_PHOENIX
        - GMTM700_SHIPROCK
        - GMTM700_WHITEHORSE
        - GMTM700_YELLOWKNIFE
        - GMTM600_BAHIA_BANDERAS
        - GMTM600_BELIZE
        - GMTM600_CHICAGO
        - GMTM600_COSTA_RICA
        - GMTM600_EL_SALVADOR
        - GMTM600_GUATEMALA
        - GMTM600_KNOX
        - GMTM600_TELL_CITY
        - GMTM600_MANAGUA
        - GMTM600_MATAMOROS
        - GMTM600_MENOMINEE
        - GMTM600_MERIDA
        - GMTM600_MEXICO_CITY
        - GMTM600_MONTERREY
        - GMTM600_NORTH_DAKOTA
        - GMTM600_NORTH_DAKOTA_CENTER
        - GMTM600_NORTH_DAKOTA_NEW_SALEM
        - GMTM600_RAINY_RIVER
        - GMTM600_RANKIN_INLET
        - GMTM600_REGINA
        - GMTM600_RESOLUTE
        - GMTM600_SWIFT_CURRENT
        - GMTM600_TEGUCIGALPA
        - GMTM600_WINNIPEG
        - GMTM600_EASTER
        - GMTM600_GALAPAGOS
        - GMTM500_ATIKOKAN
        - GMTM500_BOGOTA
        - GMTM500_CANCUN
        - GMTM500_CAYMAN
        - GMTM500_DETROIT
        - GMTM500_EIRUNEPE
        - GMTM500_GRAND_TURK
        - GMTM500_GUAYAQUIL
        - GMTM500_HAVANA
        - GMTM500_INDIANAPOLIS
        - GMTM500_MARENGO
        - GMTM500_PETERSBURG
        - GMTM500_VEVAY
        - GMTM500_VINCENNES
        - GMTM500_WINAMAC
        - GMTM500_IQALUIT
        - GMTM500_JAMAICA
        - GMTM500_LOUISVILLE
        - GMTM500_MONTICELLO
        - GMTM500_LIMA
        - GMTM500_MONTREAL
        - GMTM500_NASSAU
        - GMTM500_NEW_YORK
        - GMTM500_NIPIGON
        - GMTM500_PANAMA
        - GMTM500_PANGNIRTUNG
        - GMTM500_POR_AU_PRINCE
        - GMTM500_RIO_BRANCO
        - GMTM500_THUNDER_BAY
        - GMTM500_TORONTO
        - GMTM400_ANGUILLA
        - GMTM400_ANTIGUA
        - GMTM400_ARUBA
        - GMTM400_ASUNCION
        - GMTM400_BARBADO
        - GMTM400_BLANC_SABLON
        - GMTM400_BOA_VISTA
        - GMTM400_CAMPO_GRANDE
        - GMTM400_CARACA
        - GMTM400_CUIABA
        - GMTM400_CURACAO
        - GMTM400_DOMINICA
        - GMTM400_GLACE_BAY
        - GMTM400_GOOSE_BAY
        - GMTM400_GRENADA
        - GMTM400_GUADELOUPE
        - GMTM400_GUYANA
        - GMTM400_HALIFAX
        - GMTM400_KRALENDIJK
        - GMTM400_LA_PAZ
        - GMTM400_LOWER_PRINCE
        - GMTM400_MANAU
        - GMTM400_MARIGOT
        - GMTM400_MARTINIQUE
        - GMTM400_MONCTON
        - GMTM400_MONTSERRAT
        - GMTM400_PORT_OF_SPAIN
        - GMTM400_PORTO_VELHO
        - GMTM400_PUERTO_RICO
        - GMTM400_SANTIAGO
        - GMTM400_SANTO_DOMINGO
        - GMTM400_ST_BARTHELEMY
        - GMTM400_ST_KITT
        - GMTM400_ST_LUCIA
        - GMTM400_ST_THOMA
        - GMTM400_ST_VINCENT
        - GMTM400_THULE
        - GMTM400_TORTOLA
        - GMTM400_BERMUDA
        - GMTM330_ST_JOHN
        - GMTM300_ARAGUAINA
        - GMTM300_BUENOS_AIRE
        - GMTM300_CATAMARCA
        - GMTM300_CORDOBA
        - GMTM300_JUJUY
        - GMTM300_LA_RIOJA
        - GMTM300_MENDOZA
        - GMTM300_RIO_GALLEGO
        - GMTM300_SALTA
        - GMTM300_SAN_JUAN
        - GMTM300_SAN_LUI
        - GMTM300_TUCUMAN
        - GMTM300_USHUAIA
        - GMTM300_BAHIA
        - GMTM300_BELEM
        - GMTM300_CAYENNE
        - GMTM300_FORTALEZA
        - GMTM300_GODTHAB
        - GMTM300_MACEIO
        - GMTM300_MIQUELON
        - GMTM300_MONTEVIDEO
        - GMTM300_NUUK
        - GMTM300_PARAMARIBO
        - GMTM300_PUNTA_ARENA
        - GMTM300_RECIFE
        - GMTM300_SANTAREM
        - GMTM300_SAO_PAULO
        - GMTM300_PALMER
        - GMTM300_ROTHERA
        - GMTM300_STANLEY
        - GMTM200_NORONHA
        - GMTM200_SOUTH_GEORGIA
        - GMTM100_SCORESBYSUND
        - GMTM100_AZORE
        - GMTM100_CAPE_VERDE
        - GMTP000_ABIDJAN
        - GMTP000_ACCRA
        - GMTP000_BAMAKO
        - GMTP000_BANJUL
        - GMTP000_BISSAU
        - GMTP000_CONAKRY
        - GMTP000_DAKAR
        - GMTP000_FREETOWN
        - GMTP000_LOME
        - GMTP000_MONROVIA
        - GMTP000_NOUAKCHOTT
        - GMTP000_OUAGADOUGOU
        - GMTP000_SAO_TOME
        - GMTP000_DANMARKSHAVN
        - GMTP000_TROLL
        - GMTP000_CANARY
        - GMTP000_FAROE
        - GMTP000_MADEIRA
        - GMTP000_REYKJAVIK
        - GMTP000_ST_HELENA
        - GMTP000_GUERNSEY
        - GMTP000_ISLE_OF_MAN
        - GMTP000_JERSEY
        - GMTP000_LISBON
        - GMTP000_LONDON
        - GMTP000_GMT
        - GMTP100_ALGIER
        - GMTP100_BANGUI
        - GMTP100_BRAZZAVILLE
        - GMTP100_CASABLANCA
        - GMTP100_CEUTA
        - GMTP100_DOUALA
        - GMTP100_EL_AAIUN
        - GMTP100_KINSHASA
        - GMTP100_LAGO
        - GMTP100_LIBREVILLE
        - GMTP100_LUANDA
        - GMTP100_MALABO
        - GMTP100_NDJAMENA
        - GMTP100_NIAMEY
        - GMTP100_PORTO_NOVO
        - GMTP100_TUNI
        - GMTP100_LONGYEARBYEN
        - GMTP100_AMSTERDAM
        - GMTP100_ANDORRA
        - GMTP100_BELGRADE
        - GMTP100_BERLIN
        - GMTP100_BRATISLAVA
        - GMTP100_BRUSSEL
        - GMTP100_BUDAPEST
        - GMTP100_BUSINGEN
        - GMTP100_COPENHAGEN
        - GMTP100_DUBLIN
        - GMTP100_GIBRALTAR
        - GMTP100_LJUBLJANA
        - GMTP100_LUXEMBOURG
        - GMTP100_MADRID
        - GMTP100_MALTA
        - GMTP100_MONACO
        - GMTP100_OSLO
        - GMTP100_PARI
        - GMTP100_PODGORICA
        - GMTP100_PRAGUE
        - GMTP100_ROME
        - GMTP100_SAN_MARINO
        - GMTP100_SARAJEVO
        - GMTP100_SKOPJE
        - GMTP100_STOCKHOLM
        - GMTP100_TIRANE
        - GMTP100_VADUZ
        - GMTP100_VATICAN
        - GMTP100_VIENNA
        - GMTP100_WARSAW
        - GMTP100_ZAGREB
        - GMTP100_ZURICH
        - GMTP200_BLANTYRE
        - GMTP200_BUJUMBURA
        - GMTP200_CAIRO
        - GMTP200_GABORONE
        - GMTP200_HARARE
        - GMTP200_JOHANNESBURG
        - GMTP200_KHARTOUM
        - GMTP200_KIGALI
        - GMTP200_LUBUMBASHI
        - GMTP200_LUSAKA
        - GMTP200_MAPUTO
        - GMTP200_MASERU
        - GMTP200_MBABANE
        - GMTP200_TRIPOLI
        - GMTP200_WINDHOEK
        - GMTP200_AMMAN
        - GMTP200_BEIRUT
        - GMTP200_DAMASCU
        - GMTP200_FAMAGUSTA
        - GMTP200_GAZA
        - GMTP200_HEBRON
        - GMTP200_JERUSALEM
        - GMTP200_ATHEN
        - GMTP200_BUCHAREST
        - GMTP200_CHISINAU
        - GMTP200_HELSINKI
        - GMTP200_KALININGRAD
        - GMTP200_KIEV
        - GMTP200_MARIEHAMN
        - GMTP200_NICOSIA
        - GMTP200_RIGA
        - GMTP200_SOFIA
        - GMTP200_TALLINN
        - GMTP200_UZHGOROD
        - GMTP200_VILNIU
        - GMTP200_ZAPOROZHYE
        - GMTP300_ADDIS_ABABA
        - GMTP300_ASMARA
        - GMTP300_DAR_ES_SALAAM
        - GMTP300_DJIBOUTI
        - GMTP300_JUBA
        - GMTP300_KAMPALA
        - GMTP300_MOGADISHU
        - GMTP300_NAIROBI
        - GMTP300_SYOWA
        - GMTP300_ADEN
        - GMTP300_BAGHDAD
        - GMTP300_BAHRAIN
        - GMTP300_KUWAIT
        - GMTP300_QATAR
        - GMTP300_RIYADH
        - GMTP300_ISTANBUL
        - GMTP300_KIROV
        - GMTP300_MINSK
        - GMTP300_MOSCOW
        - GMTP300_SIMFEROPOL
        - GMTP300_ANTANANARIVO
        - GMTP300_COMORO
        - GMTP300_MAYOTTE
        - GMTP330_TEHRAN
        - GMTP400_BAKU
        - GMTP400_DUBAI
        - GMTP400_MUSCAT
        - GMTP400_TBILISI
        - GMTP400_YEREVAN
        - GMTP400_ASTRAKHAN
        - GMTP400_SAMARA
        - GMTP400_SARATOV
        - GMTP400_ULYANOVSK
        - GMTP400_VOLGOGRAD
        - GMTP400_MAHE
        - GMTP400_MAURITIU
        - GMTP400_REUNION
        - GMTP430_KABUL
        - GMTP500_MAWSON
        - GMTP500_AQTAU
        - GMTP500_AQTOBE
        - GMTP500_ASHGABAT
        - GMTP500_ATYRAU
        - GMTP500_DUSHANBE
        - GMTP500_KARACHI
        - GMTP500_ORAL
        - GMTP500_QYZYLORDA
        - GMTP500_SAMARKAND
        - GMTP500_TASHKENT
        - GMTP500_YEKATERINBURG
        - GMTP500_KERGUELEN
        - GMTP500_MALDIVE
        - GMTP530_CALCUTTA
        - GMTP530_COLOMBO
        - GMTP530_KOLKATA
        - GMTP545_KATHMANDU
        - GMTP545_KATMANDU
        - GMTP600_VOSTOK
        - GMTP600_ALMATY
        - GMTP600_BISHKEK
        - GMTP600_DHAKA
        - GMTP600_KASHGAR
        - GMTP600_OMSK
        - GMTP600_QOSTANAY
        - GMTP600_THIMPHU
        - GMTP600_URUMQI
        - GMTP600_CHAGO
        - GMTP630_RANGOON
        - GMTP630_YANGON
        - GMTP630_COCO
        - GMTP700_DAVI
        - GMTP700_BANGKOK
        - GMTP700_BARNAUL
        - GMTP700_HO_CHI_MINH
        - GMTP700_HOVD
        - GMTP700_JAKARTA
        - GMTP700_KRASNOYARSK
        - GMTP700_NOVOKUZNETSK
        - GMTP700_NOVOSIBIRSK
        - GMTP700_PHNOM_PENH
        - GMTP700_PONTIANAK
        - GMTP700_TOMSK
        - GMTP700_VIENTIANE
        - GMTP700_CHRISTMA
        - GMTP800_CASEY
        - GMTP800_BRUNEI
        - GMTP800_CHOIBALSAN
        - GMTP800_CHONGQING
        - GMTP800_HARBIN
        - GMTP800_HONG_KONG
        - GMTP800_IRKUTSK
        - GMTP800_KUALA_LUMPUR
        - GMTP800_KUCHING
        - GMTP800_MACAU
        - GMTP800_MAKASSAR
        - GMTP800_MANILA
        - GMTP800_SHANGHAI
        - GMTP800_SINGAPORE
        - GMTP800_TAIPEI
        - GMTP800_ULAANBAATAR
        - GMTP800_PERTH
        - GMTP845_EUCLA
        - GMTP900_CHITA
        - GMTP900_DILI
        - GMTP900_JAYAPURA
        - GMTP900_KHANDYGA
        - GMTP900_PYONGYANG
        - GMTP900_SEOUL
        - GMTP900_TOKYO
        - GMTP900_YAKUTSK
        - GMTP900_PALAU
        - GMTP930_ADELAIDE
        - GMTP930_BROKEN_HILL
        - GMTP930_DARWIN
        - GMTP1000_DUMONTDURVILLE
        - GMTP1000_UST_NERA
        - GMTP1000_VLADIVOSTOK
        - GMTP1000_BRISBANE
        - GMTP1000_CURRIE
        - GMTP1000_HOBART
        - GMTP1000_LINDEMAN
        - GMTP1000_MELBOURNE
        - GMTP1000_SYDNEY
        - GMTP1000_CHUUK
        - GMTP1000_GUAM
        - GMTP1000_PORT_MORESBY
        - GMTP1000_SAIPAN
        - GMTP1000_TRUK
        - GMTP1030_LORD_HOWE
        - GMTP1100_MACQUARIE
        - GMTP1100_MAGADAN
        - GMTP1100_SAKHALIN
        - GMTP1100_SREDNEKOLYMSK
        - GMTP1100_BOUGAINVILLE
        - GMTP1100_EFATE
        - GMTP1100_GUADALCANAL
        - GMTP1100_KOSRAE
        - GMTP1100_NORFOLK
        - GMTP1100_NOUMEA
        - GMTP1100_POHNPEI
        - GMTP1100_PONAPE
        - GMTP1200_MCMURDO
        - GMTP1200_ANADYR
        - GMTP1200_KAMCHATKA
        - GMTP1200_AUCKLAND
        - GMTP1200_FIJI
        - GMTP1200_FUNAFUTI
        - GMTP1200_KWAJALEIN
        - GMTP1200_MAJURO
        - GMTP1200_NAURU
        - GMTP1200_TARAWA
        - GMTP1200_WAKE
        - GMTP1200_WALLI
        - GMTP1245_CHATHAM
        - GMTP1300_APIA
        - GMTP1300_ENDERBURY
        - GMTP1300_FAKAOFO
        - GMTP1300_TONGATAPU
      description: |-
        - TIME_ZONE_TYPE_UNKNOWN: Значение не указано
         - GMTM1100_MIDWAY: (GMT-11:00) Midway
         - GMTM1100_NIUE: (GMT-11:00) Niue
         - GMTM1000_ADAK: (GMT-10:00) Adak
         - GMTM1000_HONOLULU: (GMT-10:00) Honolulu
         - GMTM1000_JOHNSTON: (GMT-10:00) Johnston
         - GMTM1000_RAROTONGA: (GMT-10:00) Rarotonga
         - GMTM1000_TAHITI: (GMT-10:00) Tahiti
         - GMTM930_MARQUESAS: (GMT-9:30) Marquesas
         - GMTM900_ANCHORAGE: (GMT-9:00) Anchorage
         - GMTM900_JUNEAU: (GMT-9:00) Juneau
         - GMTM900_METLAKATLA: (GMT-9:00) Metlakatla
         - GMTM900_NOME: (GMT-9:00) Nome
         - GMTM900_SITKA: (GMT-9:00) Sitka
         - GMTM900_YAKUTAT: (GMT-9:00) Yakutat
         - GMTM900_GAMBIER: (GMT-9:00) Gambier
         - GMTM800_LOS_ANGELES: (GMT-8:00) Los_Angeles
         - GMTM800_SANTA_ISABEL: (GMT-8:00) Santa_Isabel
         - GMTM800_TIJUANA: (GMT-8:00) Tijuana
         - GMTM800_VANCOUVER: (GMT-8:00) Vancouver
         - GMTM800_PITCAIRN: (GMT-8:00) Pitcairn
         - GMTM700_BOISE: (GMT-7:00) Boise
         - GMTM700_CAMBRIDGE_BAY: (GMT-7:00) Cambridge_Bay
         - GMTM700_CHIHUAHUA: (GMT-7:00) Chihuahua
         - GMTM700_CRESTON: (GMT-7:00) Creston
         - GMTM700_DAWSON: (GMT-7:00) Dawson
         - GMTM700_DAWSON_CREEK: (GMT-7:00) Dawson_Creek
         - GMTM700_DENVER: (GMT-7:00) Denver
         - GMTM700_EDMONTON: (GMT-7:00) Edmonton
         - GMTM700_FORT_NELSON: (GMT-7:00) Fort_Nelson
         - GMTM700_HERMOSILLO: (GMT-7:00) Hermosillo
         - GMTM700_INUVIK: (GMT-7:00) Inuvik
         - GMTM700_MAZATLAN: (GMT-7:00) Mazatlan
         - GMTM700_OJINAGA: (GMT-7:00) Ojinaga
         - GMTM700_PHOENIX: (GMT-7:00) Phoenix
         - GMTM700_SHIPROCK: (GMT-7:00) Shiprock
         - GMTM700_WHITEHORSE: (GMT-7:00) Whitehorse
         - GMTM700_YELLOWKNIFE: (GMT-7:00) Yellowknife<
         - GMTM600_BAHIA_BANDERAS: (GMT-6:00) Bahia_Banderas
         - GMTM600_BELIZE: (GMT-6:00) Belize
         - GMTM600_CHICAGO: (GMT-6:00) Chicago
         - GMTM600_COSTA_RICA: (GMT-6:00) Costa_Rica
         - GMTM600_EL_SALVADOR: (GMT-6:00) El_Salvador
         - GMTM600_GUATEMALA: (GMT-6:00) Guatemala
         - GMTM600_KNOX: (GMT-6:00) Knox
         - GMTM600_TELL_CITY: (GMT-6:00) Tell_City
         - GMTM600_MANAGUA: (GMT-6:00) Managua
         - GMTM600_MATAMOROS: (GMT-6:00) Matamoros
         - GMTM600_MENOMINEE: (GMT-6:00) Menominee
         - GMTM600_MERIDA: (GMT-6:00) Merida
         - GMTM600_MEXICO_CITY: (GMT-6:00) Mexico_City
         - GMTM600_MONTERREY: (GMT-6:00) Monterrey
         - GMTM600_NORTH_DAKOTA: (GMT-6:00) North_Dakota
         - GMTM600_NORTH_DAKOTA_CENTER: (GMT-6:00) North_Dakota/Center
         - GMTM600_NORTH_DAKOTA_NEW_SALEM: (GMT-6:00) North_Dakota/New_Salem
         - GMTM600_RAINY_RIVER: (GMT-6:00) Rainy_River
         - GMTM600_RANKIN_INLET: (GMT-6:00) Rankin_Inlet
         - GMTM600_REGINA: (GMT-6:00) Regina
         - GMTM600_RESOLUTE: (GMT-6:00) Resolute
         - GMTM600_SWIFT_CURRENT: (GMT-6:00) Swift_Current
         - GMTM600_TEGUCIGALPA: (GMT-6:00) Tegucigalpa
         - GMTM600_WINNIPEG: (GMT-6:00) Winnipeg
         - GMTM600_EASTER: (GMT-6:00) Easter
         - GMTM600_GALAPAGOS: (GMT-6:00) Galapagos
         - GMTM500_ATIKOKAN: (GMT-5:00) Atikokan
         - GMTM500_BOGOTA: (GMT-5:00) Bogota
         - GMTM500_CANCUN: (GMT-5:00) Cancun
         - GMTM500_CAYMAN: (GMT-5:00) Cayman
         - GMTM500_DETROIT: (GMT-5:00) Detroit
         - GMTM500_EIRUNEPE: (GMT-5:00) Eirunepe
         - GMTM500_GRAND_TURK: (GMT-5:00) Grand_Turk
         - GMTM500_GUAYAQUIL: (GMT-5:00) Guayaquil
         - GMTM500_HAVANA: (GMT-5:00) Havana
         - GMTM500_INDIANAPOLIS: (GMT-5:00) Indianapolis
         - GMTM500_MARENGO: (GMT-5:00) Marengo
         - GMTM500_PETERSBURG: (GMT-5:00) Petersburg
         - GMTM500_VEVAY: (GMT-5:00) Vevay
         - GMTM500_VINCENNES: (GMT-5:00) Vincennes
         - GMTM500_WINAMAC: (GMT-5:00) Winamac
         - GMTM500_IQALUIT: (GMT-5:00) Iqaluit
         - GMTM500_JAMAICA: (GMT-5:00) Jamaica
         - GMTM500_LOUISVILLE: (GMT-5:00) Louisville
         - GMTM500_MONTICELLO: (GMT-5:00) Monticello
         - GMTM500_LIMA: (GMT-5:00) Lima
         - GMTM500_MONTREAL: (GMT-5:00) Montreal
         - GMTM500_NASSAU: (GMT-5:00) Nassau
         - GMTM500_NEW_YORK: (GMT-5:00) New_York
         - GMTM500_NIPIGON: (GMT-5:00) Nipigon
         - GMTM500_PANAMA: (GMT-5:00) Panama
         - GMTM500_PANGNIRTUNG: (GMT-5:00) Pangnirtung
         - GMTM500_POR_AU_PRINCE: (GMT-5:00) Port-au-Prince
         - GMTM500_RIO_BRANCO: (GMT-5:00) Rio_Branco
         - GMTM500_THUNDER_BAY: (GMT-5:00) Thunder_Bay
         - GMTM500_TORONTO: (GMT-5:00) Toronto
         - GMTM400_ANGUILLA: (GMT-4:00) Anguilla
         - GMTM400_ANTIGUA: (GMT-4:00) Antigua
         - GMTM400_ARUBA: (GMT-4:00) Aruba
         - GMTM400_ASUNCION: (GMT-4:00) Asuncion
         - GMTM400_BARBADO: (GMT-4:00) Barbado
         - GMTM400_BLANC_SABLON: (GMT-4:00) Blanc-Sablon
         - GMTM400_BOA_VISTA: (GMT-4:00) Boa_Vista
         - GMTM400_CAMPO_GRANDE: (GMT-4:00) Campo_Grande
         - GMTM400_CARACA: (GMT-4:00) Caraca
         - GMTM400_CUIABA: (GMT-4:00) Cuiaba
         - GMTM400_CURACAO: (GMT-4:00) Curacao
         - GMTM400_DOMINICA: (GMT-4:00) Dominica
         - GMTM400_GLACE_BAY: (GMT-4:00) Glace_Bay
         - GMTM400_GOOSE_BAY: (GMT-4:00) Goose_Bay
         - GMTM400_GRENADA: (GMT-4:00) Grenada
         - GMTM400_GUADELOUPE: (GMT-4:00) Guadeloupe
         - GMTM400_GUYANA: (GMT-4:00) Guyana
         - GMTM400_HALIFAX: (GMT-4:00) Halifax
         - GMTM400_KRALENDIJK: (GMT-4:00) Kralendijk
         - GMTM400_LA_PAZ: (GMT-4:00) La_Paz
         - GMTM400_LOWER_PRINCE: (GMT-4:00) Lower_Prince
         - GMTM400_MANAU: (GMT-4:00) Manau
         - GMTM400_MARIGOT: (GMT-4:00) Marigot
         - GMTM400_MARTINIQUE: (GMT-4:00) Martinique
         - GMTM400_MONCTON: (GMT-4:00) Moncton
         - GMTM400_MONTSERRAT: (GMT-4:00) Montserrat
         - GMTM400_PORT_OF_SPAIN: (GMT-4:00) Port_of_Spain
         - GMTM400_PORTO_VELHO: (GMT-4:00) Porto_Velho
         - GMTM400_PUERTO_RICO: (GMT-4:00) Puerto_Rico
         - GMTM400_SANTIAGO: (GMT-4:00) Santiago
         - GMTM400_SANTO_DOMINGO: (GMT-4:00) Santo_Domingo
         - GMTM400_ST_BARTHELEMY: (GMT-4:00) St_Barthelemy
         - GMTM400_ST_KITT: (GMT-4:00) St_Kitt
         - GMTM400_ST_LUCIA: (GMT-4:00) St_Lucia
         - GMTM400_ST_THOMA: (GMT-4:00) St_Thoma
         - GMTM400_ST_VINCENT: (GMT-4:00) St_Vincent
         - GMTM400_THULE: (GMT-4:00) Thule
         - GMTM400_TORTOLA: (GMT-4:00) Tortola
         - GMTM400_BERMUDA: (GMT-4:00) Bermuda
         - GMTM330_ST_JOHN: (GMT-3:30) St_John
         - GMTM300_ARAGUAINA: (GMT-3:00) Araguaina
         - GMTM300_BUENOS_AIRE: (GMT-3:00) Buenos_Aire
         - GMTM300_CATAMARCA: (GMT-3:00) Catamarca
         - GMTM300_CORDOBA: (GMT-3:00) Cordoba
         - GMTM300_JUJUY: (GMT-3:00) Jujuy
         - GMTM300_LA_RIOJA: (GMT-3:00) La_Rioja
         - GMTM300_MENDOZA: (GMT-3:00) Mendoza
         - GMTM300_RIO_GALLEGO: (GMT-3:00) Rio_Gallego
         - GMTM300_SALTA: (GMT-3:00) Salta
         - GMTM300_SAN_JUAN: (GMT-3:00) San_Juan
         - GMTM300_SAN_LUI: (GMT-3:00) San_Lui
         - GMTM300_TUCUMAN: (GMT-3:00) Tucuman
         - GMTM300_USHUAIA: (GMT-3:00) Ushuaia
         - GMTM300_BAHIA: (GMT-3:00) Bahia
         - GMTM300_BELEM: (GMT-3:00) Belem
         - GMTM300_CAYENNE: (GMT-3:00) Cayenne
         - GMTM300_FORTALEZA: (GMT-3:00) Fortaleza
         - GMTM300_GODTHAB: (GMT-3:00) Godthab
         - GMTM300_MACEIO: (GMT-3:00) Maceio
         - GMTM300_MIQUELON: (GMT-3:00) Miquelon
         - GMTM300_MONTEVIDEO: (GMT-3:00) Montevideo
         - GMTM300_NUUK: (GMT-3:00) Nuuk
         - GMTM300_PARAMARIBO: (GMT-3:00) Paramaribo
         - GMTM300_PUNTA_ARENA: (GMT-3:00) Punta_Arena
         - GMTM300_RECIFE: (GMT-3:00) Recife
         - GMTM300_SANTAREM: (GMT-3:00) Santarem
         - GMTM300_SAO_PAULO: (GMT-3:00) Sao_Paulo
         - GMTM300_PALMER: (GMT-3:00) Palmer
         - GMTM300_ROTHERA: (GMT-3:00) Rothera
         - GMTM300_STANLEY: (GMT-3:00) Stanley
         - GMTM200_NORONHA: (GMT-2:00) Noronha
         - GMTM200_SOUTH_GEORGIA: (GMT-2:00) South_Georgia
         - GMTM100_SCORESBYSUND: (GMT-1:00) Scoresbysund
         - GMTM100_AZORE: (GMT-1:00) Azore
         - GMTM100_CAPE_VERDE: (GMT-1:00) Cape_Verde
         - GMTP000_ABIDJAN: (GMT+0:00) Abidjan
         - GMTP000_ACCRA: (GMT+0:00) Accra
         - GMTP000_BAMAKO: (GMT+0:00) Bamako
         - GMTP000_BANJUL: (GMT+0:00) Banjul
         - GMTP000_BISSAU: (GMT+0:00) Bissau
         - GMTP000_CONAKRY: (GMT+0:00) Conakry
         - GMTP000_DAKAR: (GMT+0:00) Dakar
         - GMTP000_FREETOWN: (GMT+0:00) Freetown
         - GMTP000_LOME: (GMT+0:00) Lome
         - GMTP000_MONROVIA: (GMT+0:00) Monrovia
         - GMTP000_NOUAKCHOTT: (GMT+0:00) Nouakchott
         - GMTP000_OUAGADOUGOU: (GMT+0:00) Ouagadougou
         - GMTP000_SAO_TOME: (GMT+0:00) Sao_Tome
         - GMTP000_DANMARKSHAVN: (GMT+0:00) Danmarkshavn
         - GMTP000_TROLL: (GMT+0:00) Troll
         - GMTP000_CANARY: (GMT+0:00) Canary
         - GMTP000_FAROE: (GMT+0:00) Faroe
         - GMTP000_MADEIRA: (GMT+0:00) Madeira
         - GMTP000_REYKJAVIK: (GMT+0:00) Reykjavik
         - GMTP000_ST_HELENA: (GMT+0:00) St_Helena
         - GMTP000_GUERNSEY: (GMT+0:00) Guernsey
         - GMTP000_ISLE_OF_MAN: (GMT+0:00) Isle_of_Man
         - GMTP000_JERSEY: (GMT+0:00) Jersey
         - GMTP000_LISBON: (GMT+0:00) Lisbon
         - GMTP000_LONDON: (GMT+0:00) London
         - GMTP000_GMT: (GMT+0:00) GMT
         - GMTP100_ALGIER: (GMT+1:00) Algier
         - GMTP100_BANGUI: (GMT+1:00) Bangui
         - GMTP100_BRAZZAVILLE: (GMT+1:00) Brazzaville
         - GMTP100_CASABLANCA: (GMT+1:00) Casablanca
         - GMTP100_CEUTA: (GMT+1:00) Ceuta
         - GMTP100_DOUALA: (GMT+1:00) Douala
         - GMTP100_EL_AAIUN: (GMT+1:00) El_Aaiun
         - GMTP100_KINSHASA: (GMT+1:00) Kinshasa
         - GMTP100_LAGO: (GMT+1:00) Lago
         - GMTP100_LIBREVILLE: (GMT+1:00) Libreville
         - GMTP100_LUANDA: (GMT+1:00) Luanda
         - GMTP100_MALABO: (GMT+1:00) Malabo
         - GMTP100_NDJAMENA: (GMT+1:00) Ndjamena
         - GMTP100_NIAMEY: (GMT+1:00) Niamey
         - GMTP100_PORTO_NOVO: (GMT+1:00) Porto-Novo
         - GMTP100_TUNI: (GMT+1:00) Tuni
         - GMTP100_LONGYEARBYEN: (GMT+1:00) Longyearbyen
         - GMTP100_AMSTERDAM: (GMT+1:00) Amsterdam
         - GMTP100_ANDORRA: (GMT+1:00) Andorra
         - GMTP100_BELGRADE: (GMT+1:00) Belgrade
         - GMTP100_BERLIN: (GMT+1:00) Berlin
         - GMTP100_BRATISLAVA: (GMT+1:00) Bratislava
         - GMTP100_BRUSSEL: (GMT+1:00) Brussel
         - GMTP100_BUDAPEST: (GMT+1:00) Budapest
         - GMTP100_BUSINGEN: (GMT+1:00) Busingen
         - GMTP100_COPENHAGEN: (GMT+1:00) Copenhagen
         - GMTP100_DUBLIN: (GMT+1:00) Dublin
         - GMTP100_GIBRALTAR: (GMT+1:00) Gibraltar
         - GMTP100_LJUBLJANA: (GMT+1:00) Ljubljana
         - GMTP100_LUXEMBOURG: (GMT+1:00) Luxembourg
         - GMTP100_MADRID: (GMT+1:00) Madrid
         - GMTP100_MALTA: (GMT+1:00) Malta
         - GMTP100_MONACO: (GMT+1:00) Monaco
         - GMTP100_OSLO: (GMT+1:00) Oslo
         - GMTP100_PARI: (GMT+1:00) Pari
         - GMTP100_PODGORICA: (GMT+1:00) Podgorica
         - GMTP100_PRAGUE: (GMT+1:00) Prague
         - GMTP100_ROME: (GMT+1:00) Rome
         - GMTP100_SAN_MARINO: (GMT+1:00) San_Marino
         - GMTP100_SARAJEVO: (GMT+1:00) Sarajevo
         - GMTP100_SKOPJE: (GMT+1:00) Skopje
         - GMTP100_STOCKHOLM: (GMT+1:00) Stockholm
         - GMTP100_TIRANE: (GMT+1:00) Tirane
         - GMTP100_VADUZ: (GMT+1:00) Vaduz
         - GMTP100_VATICAN: (GMT+1:00) Vatican
         - GMTP100_VIENNA: (GMT+1:00) Vienna
         - GMTP100_WARSAW: (GMT+1:00) Warsaw
         - GMTP100_ZAGREB: (GMT+1:00) Zagreb
         - GMTP100_ZURICH: (GMT+1:00) Zurich
         - GMTP200_BLANTYRE: (GMT+2:00) Blantyre
         - GMTP200_BUJUMBURA: (GMT+2:00) Bujumbura
         - GMTP200_CAIRO: (GMT+2:00) Cairo
         - GMTP200_GABORONE: (GMT+2:00) Gaborone
         - GMTP200_HARARE: (GMT+2:00) Harare
         - GMTP200_JOHANNESBURG: (GMT+2:00) Johannesburg
         - GMTP200_KHARTOUM: (GMT+2:00) Khartoum
         - GMTP200_KIGALI: (GMT+2:00) Kigali
         - GMTP200_LUBUMBASHI: (GMT+2:00) Lubumbashi
         - GMTP200_LUSAKA: (GMT+2:00) Lusaka
         - GMTP200_MAPUTO: (GMT+2:00) Maputo
         - GMTP200_MASERU: (GMT+2:00) Maseru
         - GMTP200_MBABANE: (GMT+2:00) Mbabane
         - GMTP200_TRIPOLI: (GMT+2:00) Tripoli
         - GMTP200_WINDHOEK: (GMT+2:00) Windhoek
         - GMTP200_AMMAN: (GMT+2:00) Amman
         - GMTP200_BEIRUT: (GMT+2:00) Beirut
         - GMTP200_DAMASCU: (GMT+2:00) Damascu
         - GMTP200_FAMAGUSTA: (GMT+2:00) Famagusta
         - GMTP200_GAZA: (GMT+2:00) Gaza
         - GMTP200_HEBRON: (GMT+2:00) Hebron
         - GMTP200_JERUSALEM: (GMT+2:00) Jerusalem
         - GMTP200_ATHEN: (GMT+2:00) Athen
         - GMTP200_BUCHAREST: (GMT+2:00) Bucharest
         - GMTP200_CHISINAU: (GMT+2:00) Chisinau
         - GMTP200_HELSINKI: (GMT+2:00) Helsinki
         - GMTP200_KALININGRAD: (GMT+2:00) Kaliningrad
         - GMTP200_KIEV: (GMT+2:00) Kiev
         - GMTP200_MARIEHAMN: (GMT+2:00) Mariehamn
         - GMTP200_NICOSIA: (GMT+2:00) Nicosia
         - GMTP200_RIGA: (GMT+2:00) Riga
         - GMTP200_SOFIA: (GMT+2:00) Sofia
         - GMTP200_TALLINN: (GMT+2:00) Tallinn
         - GMTP200_UZHGOROD: (GMT+2:00) Uzhgorod
         - GMTP200_VILNIU: (GMT+2:00) Vilniu
         - GMTP200_ZAPOROZHYE: (GMT+2:00) Zaporozhye
         - GMTP300_ADDIS_ABABA: (GMT+3:00) Addis_Ababa
         - GMTP300_ASMARA: (GMT+3:00) Asmara
         - GMTP300_DAR_ES_SALAAM: (GMT+3:00) Dar_es_Salaam
         - GMTP300_DJIBOUTI: (GMT+3:00) Djibouti
         - GMTP300_JUBA: (GMT+3:00) Juba
         - GMTP300_KAMPALA: (GMT+3:00) Kampala
         - GMTP300_MOGADISHU: (GMT+3:00) Mogadishu
         - GMTP300_NAIROBI: (GMT+3:00) Nairobi
         - GMTP300_SYOWA: (GMT+3:00) Syowa
         - GMTP300_ADEN: (GMT+3:00) Aden
         - GMTP300_BAGHDAD: (GMT+3:00) Baghdad
         - GMTP300_BAHRAIN: (GMT+3:00) Bahrain
         - GMTP300_KUWAIT: (GMT+3:00) Kuwait
         - GMTP300_QATAR: (GMT+3:00) Qatar
         - GMTP300_RIYADH: (GMT+3:00) Riyadh
         - GMTP300_ISTANBUL: (GMT+3:00) Istanbul
         - GMTP300_KIROV: (GMT+3:00) Kirov
         - GMTP300_MINSK: (GMT+3:00) Minsk
         - GMTP300_MOSCOW: (GMT+3:00) Moscow
         - GMTP300_SIMFEROPOL: (GMT+3:00) Simferopol
         - GMTP300_ANTANANARIVO: (GMT+3:00) Antananarivo
         - GMTP300_COMORO: (GMT+3:00) Comoro
         - GMTP300_MAYOTTE: (GMT+3:00) Mayotte
         - GMTP330_TEHRAN: (GMT+3:30) Tehran
         - GMTP400_BAKU: (GMT+4:00) Baku
         - GMTP400_DUBAI: (GMT+4:00) Dubai
         - GMTP400_MUSCAT: (GMT+4:00) Muscat
         - GMTP400_TBILISI: (GMT+4:00) Tbilisi
         - GMTP400_YEREVAN: (GMT+4:00) Yerevan
         - GMTP400_ASTRAKHAN: (GMT+4:00) Astrakhan
         - GMTP400_SAMARA: (GMT+4:00) Samara
         - GMTP400_SARATOV: (GMT+4:00) Saratov
         - GMTP400_ULYANOVSK: (GMT+4:00) Ulyanovsk
         - GMTP400_VOLGOGRAD: (GMT+4:00) Volgograd
         - GMTP400_MAHE: (GMT+4:00) Mahe
         - GMTP400_MAURITIU: (GMT+4:00) Mauritiu
         - GMTP400_REUNION: (GMT+4:00) Reunion
         - GMTP430_KABUL: (GMT+4:30) Kabul
         - GMTP500_MAWSON: (GMT+5:00) Mawson
         - GMTP500_AQTAU: (GMT+5:00) Aqtau
         - GMTP500_AQTOBE: (GMT+5:00) Aqtobe
         - GMTP500_ASHGABAT: (GMT+5:00) Ashgabat
         - GMTP500_ATYRAU: (GMT+5:00) Atyrau
         - GMTP500_DUSHANBE: (GMT+5:00) Dushanbe
         - GMTP500_KARACHI: (GMT+5:00) Karachi
         - GMTP500_ORAL: (GMT+5:00) Oral
         - GMTP500_QYZYLORDA: (GMT+5:00) Qyzylorda
         - GMTP500_SAMARKAND: (GMT+5:00) Samarkand
         - GMTP500_TASHKENT: (GMT+5:00) Tashkent
         - GMTP500_YEKATERINBURG: (GMT+5:00) Yekaterinburg
         - GMTP500_KERGUELEN: (GMT+5:00) Kerguelen
         - GMTP500_MALDIVE: (GMT+5:00) Maldive
         - GMTP530_CALCUTTA: (GMT+5:30) Calcutta
         - GMTP530_COLOMBO: (GMT+5:30) Colombo
         - GMTP530_KOLKATA: (GMT+5:30) Kolkata
         - GMTP545_KATHMANDU: (GMT+5:45) Kathmandu
         - GMTP545_KATMANDU: (GMT+5:45) Katmandu
         - GMTP600_VOSTOK: (GMT+6:00) Vostok
         - GMTP600_ALMATY: (GMT+6:00) Almaty
         - GMTP600_BISHKEK: (GMT+6:00) Bishkek
         - GMTP600_DHAKA: (GMT+6:00) Dhaka
         - GMTP600_KASHGAR: (GMT+6:00) Kashgar
         - GMTP600_OMSK: (GMT+6:00) Omsk
         - GMTP600_QOSTANAY: (GMT+6:00) Qostanay
         - GMTP600_THIMPHU: (GMT+6:00) Thimphu
         - GMTP600_URUMQI: (GMT+6:00) Urumqi
         - GMTP600_CHAGO: (GMT+6:00) Chago
         - GMTP630_RANGOON: (GMT+6:30) Rangoon
         - GMTP630_YANGON: (GMT+6:30) Yangon
         - GMTP630_COCO: (GMT+6:30) Coco
         - GMTP700_DAVI: (GMT+7:00) Davi
         - GMTP700_BANGKOK: (GMT+7:00) Bangkok
         - GMTP700_BARNAUL: (GMT+7:00) Barnaul
         - GMTP700_HO_CHI_MINH: (GMT+7:00) Ho_Chi_Minh
         - GMTP700_HOVD: (GMT+7:00) Hovd
         - GMTP700_JAKARTA: (GMT+7:00) Jakarta
         - GMTP700_KRASNOYARSK: (GMT+7:00) Krasnoyarsk
         - GMTP700_NOVOKUZNETSK: (GMT+7:00) Novokuznetsk
         - GMTP700_NOVOSIBIRSK: (GMT+7:00) Novosibirsk
         - GMTP700_PHNOM_PENH: (GMT+7:00) Phnom_Penh
         - GMTP700_PONTIANAK: (GMT+7:00) Pontianak
         - GMTP700_TOMSK: (GMT+7:00) Tomsk
         - GMTP700_VIENTIANE: (GMT+7:00) Vientiane
         - GMTP700_CHRISTMA: (GMT+7:00) Christma
         - GMTP800_CASEY: (GMT+8:00) Casey
         - GMTP800_BRUNEI: (GMT+8:00) Brunei
         - GMTP800_CHOIBALSAN: (GMT+8:00) Choibalsan
         - GMTP800_CHONGQING: (GMT+8:00) Chongqing
         - GMTP800_HARBIN: (GMT+8:00) Harbin
         - GMTP800_HONG_KONG: (GMT+8:00) Hong_Kong
         - GMTP800_IRKUTSK: (GMT+8:00) Irkutsk
         - GMTP800_KUALA_LUMPUR: (GMT+8:00) Kuala_Lumpur
         - GMTP800_KUCHING: (GMT+8:00) Kuching
         - GMTP800_MACAU: (GMT+8:00) Macau
         - GMTP800_MAKASSAR: (GMT+8:00) Makassar
         - GMTP800_MANILA: (GMT+8:00) Manila
         - GMTP800_SHANGHAI: (GMT+8:00) Shanghai
         - GMTP800_SINGAPORE: (GMT+8:00) Singapore
         - GMTP800_TAIPEI: (GMT+8:00) Taipei
         - GMTP800_ULAANBAATAR: (GMT+8:00) Ulaanbaatar
         - GMTP800_PERTH: (GMT+8:00) Perth
         - GMTP845_EUCLA: (GMT+8:45) Eucla
         - GMTP900_CHITA: (GMT+9:00) Chita
         - GMTP900_DILI: (GMT+9:00) Dili
         - GMTP900_JAYAPURA: (GMT+9:00) Jayapura
         - GMTP900_KHANDYGA: (GMT+9:00) Khandyga
         - GMTP900_PYONGYANG: (GMT+9:00) Pyongyang
         - GMTP900_SEOUL: (GMT+9:00) Seoul
         - GMTP900_TOKYO: (GMT+9:00) Tokyo
         - GMTP900_YAKUTSK: (GMT+9:00) Yakutsk
         - GMTP900_PALAU: (GMT+9:00) Palau
         - GMTP930_ADELAIDE: (GMT+9:30) Adelaide
         - GMTP930_BROKEN_HILL: (GMT+9:30) Broken_Hill
         - GMTP930_DARWIN: (GMT+9:30) Darwin
         - GMTP1000_DUMONTDURVILLE: (GMT+10:00) DumontDUrville
         - GMTP1000_UST_NERA: (GMT+10:00) Ust-Nera
         - GMTP1000_VLADIVOSTOK: (GMT+10:00) Vladivostok
         - GMTP1000_BRISBANE: (GMT+10:00) Brisbane
         - GMTP1000_CURRIE: (GMT+10:00) Currie
         - GMTP1000_HOBART: (GMT+10:00) Hobart
         - GMTP1000_LINDEMAN: (GMT+10:00) Lindeman
         - GMTP1000_MELBOURNE: (GMT+10:00) Melbourne
         - GMTP1000_SYDNEY: (GMT+10:00) Sydney
         - GMTP1000_CHUUK: (GMT+10:00) Chuuk
         - GMTP1000_GUAM: (GMT+10:00) Guam
         - GMTP1000_PORT_MORESBY: (GMT+10:00) Port_Moresby
         - GMTP1000_SAIPAN: (GMT+10:00) Saipan
         - GMTP1000_TRUK: (GMT+10:00) Truk
         - GMTP1030_LORD_HOWE: (GMT+10:30) Lord_Howe
         - GMTP1100_MACQUARIE: (GMT+11:00) Macquarie
         - GMTP1100_MAGADAN: (GMT+11:00) Magadan
         - GMTP1100_SAKHALIN: (GMT+11:00) Sakhalin
         - GMTP1100_SREDNEKOLYMSK: (GMT+11:00) Srednekolymsk
         - GMTP1100_BOUGAINVILLE: (GMT+11:00) Bougainville
         - GMTP1100_EFATE: (GMT+11:00) Efate
         - GMTP1100_GUADALCANAL: (GMT+11:00) Guadalcanal
         - GMTP1100_KOSRAE: (GMT+11:00) Kosrae
         - GMTP1100_NORFOLK: (GMT+11:00) Norfolk
         - GMTP1100_NOUMEA: (GMT+11:00) Noumea
         - GMTP1100_POHNPEI: (GMT+11:00) Pohnpei
         - GMTP1100_PONAPE: (GMT+11:00) Ponape
         - GMTP1200_MCMURDO: (GMT+12:00) McMurdo
         - GMTP1200_ANADYR: (GMT+12:00) Anadyr
         - GMTP1200_KAMCHATKA: (GMT+12:00) Kamchatka
         - GMTP1200_AUCKLAND: (GMT+12:00) Auckland
         - GMTP1200_FIJI: (GMT+12:00) Fiji
         - GMTP1200_FUNAFUTI: (GMT+12:00) Funafuti
         - GMTP1200_KWAJALEIN: (GMT+12:00) Kwajalein
         - GMTP1200_MAJURO: (GMT+12:00) Majuro
         - GMTP1200_NAURU: (GMT+12:00) Nauru
         - GMTP1200_TARAWA: (GMT+12:00) Tarawa
         - GMTP1200_WAKE: (GMT+12:00) Wake
         - GMTP1200_WALLI: (GMT+12:00) Walli
         - GMTP1245_CHATHAM: (GMT+12:45) Chatham
         - GMTP1300_APIA: (GMT+13:00) Apia
         - GMTP1300_ENDERBURY: (GMT+13:00) Enderbury
         - GMTP1300_FAKAOFO: (GMT+13:00) Fakaofo
         - GMTP1300_TONGATAPU: (GMT+13:00) Tongatapu
      title: Справочник таймзон
    ReaderDirectionType:
      type: string
      enum:
        - IN
        - OUT
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - IN: Вход
         - OUT: Выход
      title: Направление
    RelayOpenLockType:
      type: string
      enum:
        - ELECTROMAGNETIC
        - ELECTROMECHANICAL
      description: |-
        - LOCK_TYPE_UNKNOWN: Значение не указано
         - ELECTROMAGNETIC: Электромагнитный (state_operation)
         - ELECTROMECHANICAL: Электромеханический (pulse_operation)
      title: Тип замка
    SafeCityOsdPlacementType:
      type: string
      enum:
        - TOP_LEFT
        - TOP_RIGHT
        - BOTTOM_LEFT
        - BOTTOM_RIGHT
      description: |-
        - PLACEMENT_TYPE_UNKNOWN: Значение не указано
         - TOP_LEFT: Сверху слева
         - TOP_RIGHT: Сверху справа
         - BOTTOM_LEFT: Снизу слева
         - BOTTOM_RIGHT: Снизу справа
      title: Тип размещения текста
    SafeCityOsdShowDatetimeType:
      type: string
      enum:
        - ABSENT
        - DAY_TIME
        - TIME
      description: |-
        - SHOW_DATETIME_TYPE_UNKNOWN: Значение не указано
         - ABSENT: Формат отсутствует
         - DAY_TIME: День и время yyyy-mm-dd HH:MM:SS
         - TIME: Время HH:MM:SS
      title: Тип добавления формата даты
    SavingErrorDuplicateName:
      type: object
      title: Профиль с таким наименованием уже существует
    SavingErrorProfileIsNotSupported:
      type: object
      properties:
        profileIds:
          type: array
          items:
            type: integer
            format: int32
          title: Список идентификаторов профилей, которые не поддерживаются на считывателе
      title: Профиль не поддерживается для этого считывателя
    SavingErrorProfileNotFound:
      type: object
      title: Выбранный профиль не найден
    SavingErrorReaderNotFound:
      type: object
      title: Считыватель не найден
    SavingErrorTooMuchEncryptionProfiles:
      type: object
      title: Превышено допустимое количество профилей шифрования
    SyslogSettingsLogLevelType:
      type: string
      enum:
        - EMERGENCY
        - ALERT
        - CRIT
        - ERROR
        - WARN
        - NOTE
        - INFO
        - DEBUG
      description: |-
        - LOG_LEVEL_TYPE_UNKNOWN: Значение не указано
         - EMERGENCY: Система не пригодна для использования
         - ALERT: Требуются немедленные меры
         - CRIT: Сообщение о критическом состоянии
         - ERROR: Сообщение об ошибочном состоянии
         - WARN: Предупреждение
         - NOTE: Сообщение о значительном нормальном событии
         - INFO: Информационное сообщение
         - DEBUG: Сообщение отладочного уровня
      title: Уровень логирования
    SyslogSettingsProtocolType:
      type: string
      enum:
        - UDP
        - TCP
      description: |-
        - PROTOCOL_TYPE_UNKNOWN: Значение не указано
         - UDP: Протокол UDP
         - TCP: Протокол TCP
      title: Тип протокола
    TickerModeType:
      type: string
      enum:
        - OFF
        - RUNNING_LINE
        - LINE_1_BY_1
      description: |-
        - MODE_TYPE_UNKNOWN: Значение не указано
         - OFF: Выключен
         - RUNNING_LINE: Бегущая строка
         - LINE_1_BY_1: Строка одна за другой
      title: Режим строки
    UserPermission:
      type: object
      properties:
        permissionName:
          type: string
          example: can_alarm
          title: Имя разрешения
        isEnabled:
          type: boolean
          example: "true"
          title: Наличие разрешения
      title: Права доступа
      required:
        - permissionName
        - isEnabled
    VideoChannelFlowControlModeType:
      type: string
      enum:
        - VBR
        - CBR
        - CVBR
        - AVBR
        - FIXP
        - QVBR
      description: |-
        - FLOW_CONTROL_MODE_TYPE_UNKNOWN: Значение не указано
         - VBR: Режим VBR
         - CBR: Режим CBR
         - CVBR: Режим CVBR
         - AVBR: Режим AVBR
         - FIXP: Режим FIXP
         - QVBR: Режим QVBR
      title: Режим Flow control mode
    VideoChannelFormatType:
      type: string
      enum:
        - MPEG
        - H264
        - H264_PLUS
        - H265
      description: |-
        - FORMAT_TYPE_UNKNOWN: Значение не указано
         - MPEG: Формат mjpeg
         - H264: Формат h.264
         - H264_PLUS: Формат h.264+
         - H265: Формат h.265
      title: Формат видео
    VideoChannelProfileType:
      type: string
      enum:
        - PROFILE_HIGH
        - PROFILE_MAIN
        - PROFILE_BASE
      description: |-
        - PROFILE_TYPE_UNKNOWN: Значение не указано
         - PROFILE_HIGH: Высокий
         - PROFILE_MAIN: Основной
         - PROFILE_BASE: Базовый
      title: Профиль
    VideoChannelResolutionType:
      type: string
      enum:
        - R2K
        - FULLHD
        - HD
        - SD
        - R4CIF
        - VGA
      description: |-
        - RESOLUTION_TYPE_UNKNOWN: Значение не указано
         - R2K: Тип разрешения 2K 2560*1440
         - FULLHD: Тип разрешения FULLHD 1920*1080
         - HD: Тип разрешения HD 1280*720
         - SD: Тип разрешения SD 720*576
         - R4CIF: Тип разрешения 4CIF 704*576
         - VGA: Тип разрешения VGA 640*480
      title: Тип разрешения видео
    devicev1EncryptionProfile:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор.
            Тип: Guid
        title:
          type: string
          title: Наименование
        type:
          title: Тип
          allOf:
            - $ref: "#/components/schemas/v1EncryptionProfileType"
        sectorNumber:
          type: integer
          format: int32
          title: Номер сектора
        blockNumber:
          type: integer
          format: int32
          title: Номер блока
        startIndex:
          type: integer
          format: int32
          title: Первый байт в блоке
        endIndex:
          type: integer
          format: int32
          title: Последний байт в блоке
        password:
          type: string
          title: |-
            Пароль.
            Не возвращается с сервера.
            TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
      title: Профиль шифрования
      required:
        - title
        - type
        - sectorNumber
        - blockNumber
        - startIndex
        - endIndex
    protobufAny:
      type: object
      properties:
        "@type":
          type: string
      additionalProperties: {}
      title: Произвольный JSON
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: "#/components/schemas/protobufAny"
      title: Ошибка транспортного слоя
    v1Capability:
      type: object
      properties:
        encryptionProfile:
          title: Профиль шифрования
          allOf:
            - $ref: "#/components/schemas/v1CapabilityEncryptionProfile"
      title: Возможность устройства
    v1CapabilityEncryptionProfile:
      type: object
      title: Профиль шифрования
    v1CapabilityFilter:
      type: object
      title: Фильтр возможностей устройства
    v1Code:
      type: object
      properties:
        code:
          type: string
          example: 456778
          title: Код доступа
          maxLength: 100
        description:
          type: string
          example: Номер 45
          title: Описание
          maxLength: 100
        relayIndexes:
          type: array
          items:
            type: integer
            format: int32
          title: |-
            Идентификаторы реле.
            Диапазон: 1..64
      title: Код доступа
      required:
        - code
    v1CodePaging:
      type: object
      properties:
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1CodeSavingError:
      type: object
      properties:
        relayNotFound:
          title: Реле не найдено
          allOf:
            - $ref: "#/components/schemas/v1CodeSavingErrorRelayNotFound"
      title: Ошибки сохранения
    v1CodeSavingErrorRelayNotFound:
      type: object
      title: Реле не найдено
    v1ConciergeSettings:
      type: object
      properties:
        isConciergeOn:
          type: boolean
          example: true
          title: Флаг включения Concierge вызова
        sipInvite:
          type: string
          example: +74712999999_tag1=+7471334455_tag2=10.20.30.40
          title: |-
            Параметр SIP Invite для Concierge вызова.
            Произвольная строка которая передается в SIP сервер.
            Диапазон: 1..128
          maxLength: 128
          minLength: 1
        sipServer:
          type: string
          example: sip.acme.io:5060
          title: |-
            Параметр SIP Server для Concierge вызова.
            При пустом sip_server будет использован сервер SIP регистрации
      title: Настройки Concierge
      required:
        - isConciergeOn
        - sipInvite
    v1DeleteCodeListResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество удаленных
      title: Ответ на запрос удаления списка кодов доступа
    v1DeleteCodeResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteCodeResponseError"
      title: Ответ на запрос удаления одного кода доступа
    v1DeleteCodeResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1DeleteEncryptionProfileListResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество удаленных
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteEncryptionProfileListResponseError"
      title: Ответ на запрос удаления списка сущностей EncryptionProfile по фильтру
    v1DeleteEncryptionProfileListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        deleting:
          title: Ошибка удаления
          allOf:
            - $ref: "#/components/schemas/EncryptionProfileDeletingError"
      title: Ошибка запроса
    v1DeleteEncryptionProfileResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество удаленных
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteEncryptionProfileResponseError"
      title: Ответ на запрос удаления единичной сущности EncryptionProfile по ключу
    v1DeleteEncryptionProfileResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        deleting:
          title: Ошибка удаления
          allOf:
            - $ref: "#/components/schemas/EncryptionProfileDeletingError"
      title: Ошибка запроса
    v1DeleteRfidListResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество удаленных
      title: Ответ на запрос удаления списка сущностей Rfid по фильтру
    v1DeleteRfidResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteRfidResponseError"
      title: Ответ на запрос удаления единичной сущности Rfid по ключу
    v1DeleteRfidResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1DeleteRoomListResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество удаленных
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteRoomListResponseError"
      title: Ответ на запрос удаления списка настроек квартиры
    v1DeleteRoomListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1DeleteRoomResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteRoomResponseError"
      title: Ответ на запрос удаления настроек квартиры
    v1DeleteRoomResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1DeleteSafeCityEmergencyFileResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteSafeCityEmergencyFileResponseError"
      title: Ответ на запрос удаления единичной сущности SafeCityEmergencyFile по
        ключу
    v1DeleteSafeCityEmergencyFileResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1DeleteUserResponse:
      type: object
      title: Ответ на запрос удаления единичной сущности User по ключу
    v1DeviceInfo:
      type: object
      properties:
        firmwareVersion:
          type: string
          example: 3.5.0.0.1.27.29
          title: Версия программного обеспечения
        hardwareVersion:
          type: string
          example: rev5.5.6.1.2
          title: Версия аппаратного обеспечения
        model:
          type: string
          example: Beward DS86017CP
          title: Модель
        macAddress:
          type: string
          example: 00:1b:63:84:45:e6
          title: |-
            MAC-адрес.
            Диапазон: 17..17.
            Паттерн: /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/
          pattern: ^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
        ip:
          type: string
          example: 10.54.17.23
          title: >-
            IP адрес.

            Диапазон: 7..15.

            Паттерн: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
          maxLength: 15
          minLength: 7
          pattern: ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
        serialNumber:
          type: string
          example: "0000145996"
          title: Серийный номер
        uptime:
          type: integer
          format: int32
          example: 3600765
          title: |-
            Время работы в секундах.
            Диапазон: 0..2147483647
          maximum: 2147483647
        mcFirmwareVersion:
          type: string
          example: 7.8.0.0.1.27.29
          title: Версия программного обеспечения микроконтроллера
      title: Общая информация об устройстве
    v1DtmfSettings:
      type: object
      properties:
        isRfcOn:
          type: boolean
          example: true
          title: Флаг приема DTMF сигнала в варианте RFC
        isInboundOn:
          type: boolean
          example: true
          title: Флаг приема DTMF сигнала в варианте inbound
        isSipinfoOn:
          type: boolean
          example: true
          title: Флаг приема DTMF сигнала в варианте sipinfo
      title: Настройки DTMF
    v1EditConciergeSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки Concierge
          allOf:
            - $ref: "#/components/schemas/v1ConciergeSettings"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditConciergeSettingsResponseError"
      title: Ответ на запрос редактирования настроек Concierge
    v1EditConciergeSettingsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditDtmfSettingsResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditDtmfSettingsResponseError"
      title: Ответ на запрос редактирования настроек DTMF
    v1EditDtmfSettingsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditFacerecResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditFacerecResponseError"
      title: Ответ на запрос редактирования настроек Face Recognition
    v1EditFacerecResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditFtpResponse:
      type: object
      properties:
        data:
          title: Настройки FTP
          allOf:
            - $ref: "#/components/schemas/v1Ftp"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditFtpResponseError"
      title: Ответ на запрос редактирования настроек FTP
    v1EditFtpResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditNtpResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditNtpResponseError"
      title: Ответ на запрос редактирования настроек NTP
    v1EditNtpResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditReaderResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditReaderResponseError"
      title: Ответ на запрос редактирования считывателя
    v1EditReaderResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1ReaderSavingError"
      title: Ошибка запроса
    v1EditRelayPropsDtmfResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditRelayPropsDtmfResponseError"
      title: Ответ на запрос на установку настроек DTMF
    v1EditRelayPropsDtmfResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса на установку настроек DTMF
    v1EditRelayPropsOpenResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditRelayPropsOpenResponseError"
      title: Ответ на запрос на установку настроек открытия реле
    v1EditRelayPropsOpenResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса на установку настроек открытия реле
    v1EditSacResponse:
      type: object
      properties:
        data:
          title: Настройки Smart Auto Collect
          allOf:
            - $ref: "#/components/schemas/v1Sac"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSacResponseError"
      title: Ответ на запрос редактирования настроек Smart Auto Collect
    v1EditSacResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditSafeCityOsdResponse:
      type: object
      properties:
        data:
          title: Настройки OSD
          allOf:
            - $ref: "#/components/schemas/v1SafeCityOsd"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSafeCityOsdResponseError"
      title: Ответ на запрос редактирования настроек OSD
    v1EditSafeCityOsdResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditSipAccountResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSipAccountResponseError"
      title: Ответ на запрос редактирования Sip-аккаунта
    v1EditSipAccountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса редактирования Sip-аккаунта
    v1EditSipTimeoutSettingsResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSipTimeoutSettingsResponseError"
      title: Ответ на запрос редактирования настроек максимального времени общения и
        дозвона
    v1EditSipTimeoutSettingsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса редактирования настроек максимального времени общения и
        дозвона
    v1EditSosResponse:
      type: object
      properties:
        data:
          title: Настройки SOS
          allOf:
            - $ref: "#/components/schemas/v1Sos"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSosResponseError"
      title: Ответ на запрос редактирования настроек SOS
    v1EditSosResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditSyslogSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки Syslog-сервера
          allOf:
            - $ref: "#/components/schemas/v1SyslogSettings"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditSyslogSettingsResponseError"
      title: Ответ на запрос редактирования настроек Syslog-сервера
    v1EditSyslogSettingsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditTickerResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditTickerResponseError"
      title: Ответ на запрос настройки Ticker
    v1EditTickerResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EditVideoChannelResponse:
      type: object
      properties:
        data:
          title: Настройки видеоконфига
          allOf:
            - $ref: "#/components/schemas/v1VideoChannel"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1EditVideoChannelResponseError"
      title: Ответ на запрос редактирования единичной сущности VideoChannel по ключу
    v1EditVideoChannelResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1EmergencyScenario:
      type: object
      properties:
        fileName:
          type: string
          example: Happy_new_year.wav
          title: Имя файла
        totalDuration:
          type: integer
          format: int32
          example: 3600
          title: |-
            Максимальная общая длительность оповещения, в секундах.
            # Диапазон: 0..65536
        playbackPerTick:
          type: integer
          format: int32
          example: 3
          title: >-
            Количество воспроизведений файла в каждом цикле оповещения на одном
            направлении (трубка или динамик).

            # Диапазон: 0..65536
        tickCount:
          type: integer
          format: int32
          example: 10
          title: |-
            Количество воспроизведений циклов оповещения.
            # Диапазон: 0..65536
        playOrderType:
          title: Тип проигрывания
          allOf:
            - $ref: "#/components/schemas/EmergencyScenarioPlayOrderType"
      title: Сценарий оповещения
      required:
        - fileName
        - totalDuration
        - playbackPerTick
        - tickCount
        - playOrderType
    v1EncryptionProfileFilter:
      type: object
      properties:
        text:
          type: string
          title: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            Поиск производится по полям:
            # - Наименование
      title: Фильтр по профилям шифрования
    v1EncryptionProfileSavingError:
      type: object
      properties:
        duplicateName:
          title: Профиль с таким наименованием уже существует
          allOf:
            - $ref: "#/components/schemas/SavingErrorDuplicateName"
        tooMuchEncryptionProfiles:
          title: Превышено допустимое количество профилей шифрования
          allOf:
            - $ref: "#/components/schemas/SavingErrorTooMuchEncryptionProfiles"
      title: >-
        Ошибка сохранения.

        Эти проверки выполняются при работе с базой данных и сторонними сервисами
    v1EncryptionProfileType:
      type: string
      enum:
        - SL3
        - SL1
      description: |-
        - TYPE_UNKNOWN: Значение не указано
         - SL3: Тип SL3
         - SL1: Тип SL1
      title: Тип
    v1Facerec:
      type: object
      properties:
        isEnabled:
          type: boolean
          example: "true"
          title: Флаг включения Face Recognition
        mainAddress:
          type: string
          example: fr.key.rt.ru:80
          title: Адрес
        altAddress:
          type: string
          example: fr.key.rt.ru:8080
          title: Альтернативный адрес
        request:
          type: string
          example: /api/v1/recognize/31700
          title: Путь запроса к серверу
        authorization:
          type: string
          example: intercom_token
          title: Токен
        groups:
          type: array
          example:
            - this_group
            - that_group
          items:
            type: string
          title: Идентификаторы групп профилей в identix
        relayIndex:
          type: integer
          format: int32
          example: 1
          title: |-
            Индекс реле.
            Диапазон: 1..32767
          maximum: 32767
          minimum: 1
        sendInterval:
          type: integer
          format: int32
          example: 200
          title: Интервал отправки, миллисекунд
          maximum: 1000
        faceLiveness:
          type: number
          format: float
          example: "0.95"
          title: Доступность FR
          maximum: 1
        minFaceSize:
          type: integer
          format: int32
          example: 320
          title: Минимальный размер лица, пикселей
        maxFaceSize:
          type: integer
          format: int32
          example: 1080
          title: Максимальный размер лица, пикселей
        addSize:
          type: integer
          format: int32
          example: 40
          title: Добавление размера, процентов
      title: Настройки Face Recognition
      required:
        - isEnabled
        - mainAddress
        - request
        - authorization
    v1Ftp:
      type: object
      properties:
        regServerAddress:
          type: string
          example: ftp.acme.io:21
          title: |-
            Адрес FTP сервера.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:21, ftp.acme.io:21
          minLength: 5
        login:
          type: string
          example: admin
          title: Логин
        password:
          type: string
          example: pwd_admin
          title: |-
            Пароль.
            Не возвращается с сервера.
            TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
      title: Настройки FTP
    v1GateMode:
      type: object
      properties:
        isGateModeOn:
          type: boolean
          example: true
          title: |-
            Флаг включения Gate режима.
            true=gate; false=ordinary
        houses:
          type: array
          items:
            $ref: "#/components/schemas/v1House"
          title: |-
            Дома Gate режима.
            При редактировании массив полностью заменяется на отправленный
          maxItems: 100
          minItems: 1
      title: Настройки Gate режима
    v1GetCapabilityListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Capability"
          title: Список Capability
      title: Ответ на запрос получения возможностей устройства
    v1GetCodeCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество
      title: Ответ на запрос получения количества кодов доступа
    v1GetCodeListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Code"
          title: Список Code
      title: Ответ на запрос получения списка кодов доступа
    v1GetCodeResponse:
      type: object
      properties:
        data:
          title: Код доступа
          allOf:
            - $ref: "#/components/schemas/v1Code"
      title: Ответ на запрос получения получения кода доступа
    v1GetConciergeSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки Concierge
          allOf:
            - $ref: "#/components/schemas/v1ConciergeSettings"
      title: Ответ на запрос получения настроек Concierge
    v1GetDtmfSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки DTMF
          allOf:
            - $ref: "#/components/schemas/v1DtmfSettings"
      title: Ответ на запрос получения настроек DTMF
    v1GetEncryptionProfileListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/devicev1EncryptionProfile"
          title: Список EncryptionProfile
      title: Ответ на запрос получения списка сущностей EncryptionProfile по фильтру
    v1GetEncryptionProfileResponse:
      type: object
      properties:
        data:
          title: Профиль шифрования
          allOf:
            - $ref: "#/components/schemas/devicev1EncryptionProfile"
      title: Ответ на запрос получения единичной сущности EncryptionProfile по ключу
    v1GetFacerecResponse:
      type: object
      properties:
        data:
          title: Настройки Face Recognition
          allOf:
            - $ref: "#/components/schemas/v1Facerec"
      title: Ответ на запрос получения настроек Face Recognition
    v1GetFtpResponse:
      type: object
      properties:
        data:
          title: Настройки FTP
          allOf:
            - $ref: "#/components/schemas/v1Ftp"
      title: Ответ на запрос получения настроек FTP
    v1GetGateModeResponse:
      type: object
      properties:
        data:
          title: Настройки Gate режима
          allOf:
            - $ref: "#/components/schemas/v1GateMode"
      title: Ответ на запрос получения Gate режима
    v1GetNtpResponse:
      type: object
      properties:
        data:
          title: Настройки Ntp-сервера
          allOf:
            - $ref: "#/components/schemas/v1Ntp"
      title: Ответ на запрос получения настроек NTP
    v1GetReaderResponse:
      type: object
      properties:
        data:
          title: Считыватель
          allOf:
            - $ref: "#/components/schemas/v1Reader"
      title: Ответ на запрос получения считывателя
    v1GetRelayDtmfListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1RelayDtmf"
          title: Настройки DTMF реле
      title: Ответ на запрос получения настроек DTMF реле
    v1GetRelayOpenListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1RelayOpen"
          title: Настройки открытия реле
      title: Ответ на запрос получения настроек открытия реле
    v1GetRelayStatusListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1RelayState"
          title: Список состояний реле
      title: Ответ на запрос получения статусов реле устройства
    v1GetRfidCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество
      title: Ответ на запрос получения количества сущностей Rfid по фильтру
    v1GetRfidListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Rfid"
          title: Список Rfid
      title: Ответ на запрос получения списка сущностей Rfid по фильтру
    v1GetRfidResponse:
      type: object
      properties:
        data:
          title: Ключ
          allOf:
            - $ref: "#/components/schemas/v1Rfid"
      title: Ответ на запрос получения единичной сущности Rfid по ключу
    v1GetRoomCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего количество
      title: Ответ на запрос получения количества квартир
    v1GetRoomListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Room"
          title: Список Room
      title: Ответ на запрос получения списка настроек квартир
    v1GetRoomResponse:
      type: object
      properties:
        data:
          title: Квартира
          allOf:
            - $ref: "#/components/schemas/v1Room"
      title: Ответ на запрос получения настроек квартиры
    v1GetRtspResponse:
      type: object
      properties:
        data:
          title: Настройки RTSP
          allOf:
            - $ref: "#/components/schemas/v1Rtsp"
      title: Ответ на запрос получения настроек RTSP
    v1GetSacResponse:
      type: object
      properties:
        data:
          title: Настройки Smart Auto Collect
          allOf:
            - $ref: "#/components/schemas/v1Sac"
      title: Ответ на запрос получения настроек Smart Auto Collect
    v1GetSafeCityEmergencyFileListResponse:
      type: object
      properties:
        data:
          type: array
          example:
            - file_name: Happy_new_year.wav
            - file_name: Jingle_Bells.wav
          items:
            $ref: "#/components/schemas/v1SafeCityEmergencyFile"
          title: Список SafeCityEmergencyFile
      title: Ответ на запрос получения списка файлов оповещения
    v1GetSafeCityEmergencyStatusResponse:
      type: object
      properties:
        data:
          title: Статус оповещения
          allOf:
            - $ref: "#/components/schemas/GetSafeCityEmergencyStatusResponseCurrentStatus"
      title: Ответ на запрос на получение статуса оповещения
    v1GetSafeCityOsdResponse:
      type: object
      properties:
        data:
          title: Настройки OSD
          allOf:
            - $ref: "#/components/schemas/v1SafeCityOsd"
      title: Ответ на запрос получения настроек OSD
    v1GetSipAccountListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1SipAccount"
          title: Массив Sip-аккаунтов
      title: Ответ на запрос получения списка Sip-аккаунтов
    v1GetSipAccountStatusListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/GetSipAccountStatusListResponseSipStatus"
          title: Статус аккаунтов Sip
      title: Ответ на запрос получения статусов регистрации Sip-аккаунтов
    v1GetSipTimeoutSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки максимального времени общения и дозвона
          allOf:
            - $ref: "#/components/schemas/v1SipTimeoutSettings"
      title: Ответ на запрос получения настроек максимального времени общения и
        дозвона
    v1GetSosResponse:
      type: object
      properties:
        data:
          title: Настройки SOS
          allOf:
            - $ref: "#/components/schemas/v1Sos"
      title: Ответ на запрос получения настроек SOS
    v1GetSyslogSettingsResponse:
      type: object
      properties:
        data:
          title: Настройки Syslog-сервера
          allOf:
            - $ref: "#/components/schemas/v1SyslogSettings"
      title: Ответ на запрос получения настроек Syslog-сервера
    v1GetSystemInfoResponse:
      type: object
      properties:
        data:
          title: Общая информация об устройстве
          allOf:
            - $ref: "#/components/schemas/v1DeviceInfo"
      title: Ответ на запрос получения общей информации об устройстве
    v1GetTickerResponse:
      type: object
      properties:
        data:
          title: Настройки Ticker
          allOf:
            - $ref: "#/components/schemas/v1Ticker"
      title: Ответ на апрос получения настроек Ticker
    v1GetUserListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1User"
          title: Список User
      title: Ответ на запрос получения списка сущностей User по фильтру
    v1GetVideoChannelListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1VideoChannel"
          title: Список VideoChannel
      title: Ответ на запрос получения списка сущностей VideoChannel по фильтру
    v1House:
      type: object
      properties:
        address:
          type: string
          title: Адрес дома
        prefix:
          type: string
          title: Номер дома (подъезда)
        roomRange:
          title: |-
            Диапазон квартир.
            Если не задан, то устройство позволяет набор любой квартиры
          allOf:
            - $ref: "#/components/schemas/HouseRoomRange"
        sipServer:
          type: string
          example: sip.acme.io:5060
          title: |-
            Адрес Sip сервера.
            При пустом sip_server будет использован сервер SIP регистрации
        inviteTemplateType:
          title: |-
            Вариант подстановки номера дома и квартиры в SIP Invite.
            При отсутствии значения используется вариант H4LZ_F4LZ
          allOf:
            - $ref: "#/components/schemas/HouseInviteTemplateType"
      title: Дом Gate режима
      required:
        - address
        - prefix
    v1Ntp:
      type: object
      properties:
        address:
          type: string
          example: ntp.acme.io:4460
          title: |-
            Адрес Ntp-сервера.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:123, ntp.acme.io:4460
          minLength: 5
        timeZoneType:
          title: Таймзона
          allOf:
            - $ref: "#/components/schemas/NtpTimeZoneType"
      title: Настройки Ntp-сервера
    v1PostFtpBackupApplyRequest:
      type: object
      properties:
        ftpPath:
          type: string
          example: backups/annual
          title: Имя FTP папки
        fileName:
          type: string
          example: backup01012000.gz
          title: Имя файла бекапа
        restoreOptions:
          type: string
          example: after_reboot
          title: Опции восстановления
      title: Запрос применения бекапа
      required:
        - ftpPath
        - fileName
    v1PostFtpBackupApplyResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostFtpBackupApplyResponseError"
      title: Ответ на запрос применения бекапа
    v1PostFtpBackupApplyResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса создания бекапа
    v1PostFtpBackupRequest:
      type: object
      properties:
        ftpPath:
          type: string
          example: backups/annual
          title: Имя FTP папки
        fileName:
          type: string
          example: backup01012000.gz
          title: Имя файла бекапа
        backupType:
          type: string
          example: annual
          title: Тип бекапа
      title: Запрос создания бекапа
      required:
        - ftpPath
        - fileName
        - backupType
    v1PostFtpBackupResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostFtpBackupResponseError"
      title: Ответ на запрос создания бекапа
    v1PostFtpBackupResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса создания бекапа
    v1PostRelayCloseResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostRelayCloseResponseError"
      title: Ответ на запрос закрытия реле
    v1PostRelayCloseResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса закрытия реле
    v1PostRelayOpenPermanentlyResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostRelayOpenPermanentlyResponseError"
      title: Ответ на запрос открытия реле без дальнейшего закрытия
    v1PostRelayOpenPermanentlyResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса открытия реле без дальнейшего закрытия
    v1PostRelayOpenResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostRelayOpenResponseError"
      title: Ответ на запрос открытия реле
    v1PostRelayOpenResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса открытия реле
    v1PostSafeCityEmergencyStartRequest:
      type: object
      properties:
        data:
          title: Сценарий оповещения
          allOf:
            - $ref: "#/components/schemas/v1EmergencyScenario"
      title: Запрос на старт оповещения
      required:
        - data
    v1PostSafeCityEmergencyStartResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostSafeCityEmergencyStartResponseError"
      title: Ответ на запрос на старт оповещения
    v1PostSafeCityEmergencyStartResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        soundFileNotFound:
          title: Звуковой файл не найден
          allOf:
            - $ref: "#/components/schemas/ErrorSoundFileNotFound"
      title: Ошибка запроса
    v1PostSafeCityEmergencyStopRequest:
      type: object
      title: Запрос на прекращение оповещения через домофон
    v1PostSafeCityEmergencyStopResponse:
      type: object
      title: Ответ на запрос на прекращение оповещения через домофон
    v1PostSystemRebootRequest:
      type: object
      title: Запрос удаленной перезагрузки
    v1PostSystemRebootResponse:
      type: object
      title: Ответ на запрос удаленной перезагрузки
    v1PostUpdateApplyRequest:
      type: object
      title: Запрос применения обновления
    v1PostUpdateApplyResponse:
      type: object
      title: Ответ на запрос применения обновления
    v1PostUpdateDownloadRequest:
      type: object
      properties:
        ftpPath:
          type: string
          example: updates/v2.215.15/
          title: Имя FTP папки
        fileName:
          type: string
          example: firmware01012000.gz
          title: Имя файла обновления
        updateMode:
          type: string
          example: full_override_update
          title: Режим обновления
      title: Запрос скачивания обновления
      required:
        - ftpPath
        - fileName
        - updateMode
    v1PostUpdateDownloadResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostUpdateDownloadResponseError"
      title: Ответ на запрос скачивания обновления
    v1PostUpdateDownloadResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1PostUserNameReplaceRequestReplaceTo:
      type: object
      properties:
        targetUsername:
          type: string
          example: johnDoe
          title: Имя пользователя
      title: Поле на замену
      required:
        - targetUsername
    v1PostUserNameReplaceResponse:
      type: object
      title: Ответ на запрос замены имени пользователя
    v1PostUserPasswordReplaceRequestReplaceTo:
      type: object
      properties:
        password:
          type: string
          example: NewVeryStrongPassword
          title: Пароль
      title: Поле на замену
    v1PostUserPasswordReplaceResponse:
      type: object
      title: Ответ на запрос замены пароля пользователя
    v1PostUserPermissionReplaceRequestReplaceTo:
      type: object
      properties:
        permission:
          type: array
          example:
            - permission_name: can_alarm
              is_enabled: true
            - permission_name: can_reboot
              is_enabled: false
          items:
            $ref: "#/components/schemas/UserPermission"
          title: Права доступа
      title: Поле на замену
    v1PostUserPermissionReplaceResponse:
      type: object
      title: Ответ на запрос замены разрешений пользователя
    v1Reader:
      type: object
      properties:
        id:
          type: integer
          format: int32
          title: |-
            Идентификатор.
            id=100 - Считыватель внутренний.
            id=1 - Считыватель внешний №1.
            id=2 - Считыватель внешний №2 и тд
        encryptionProfileIds:
          type: array
          items:
            type: integer
            format: int32
          title: Список идентификаторов профилей шифрования
        relayIndexes:
          type: array
          items:
            type: integer
            format: int32
          title: |-
            Список идентификаторов реле.
            Диапазон: 1..64
        isNoneSecureMode:
          type: boolean
          title: Считыватель работает не в безопасном режиме (по UID)
        directionType:
          title: Направление
          allOf:
            - $ref: "#/components/schemas/ReaderDirectionType"
      title: Считыватель
      required:
        - id
        - encryptionProfileIds
        - relayIndexes
        - isNoneSecureMode
    v1ReaderSavingError:
      type: object
      properties:
        readerNotFound:
          title: Считыватель не найден
          allOf:
            - $ref: "#/components/schemas/SavingErrorReaderNotFound"
        profileIsNotSupported:
          title: Профиль не поддерживается для этого считывателя
          allOf:
            - $ref: "#/components/schemas/SavingErrorProfileIsNotSupported"
        profileNotFound:
          title: Выбранный профиль не найден
          allOf:
            - $ref: "#/components/schemas/SavingErrorProfileNotFound"
      title: Ошибки сохранения
    v1RelayDtmf:
      type: object
      properties:
        relayIndex:
          type: integer
          format: int32
          example: 1
          title: |-
            Индекс реле.
            Диапазон: 1..32767
          maximum: 32767
          minimum: 1
        dtmfCode:
          type: string
          example: 5
          title: |-
            DTMF код.
            Для разных реле допускается одинаковый DTMF код.
            Один символ из 0,1,2,3,4,5,6,7,8,9,*,#
          maxLength: 1
          minLength: 1
          pattern: ^[0-9*#]{1,1}$
      title: Настройки DTMF реле
      required:
        - relayIndex
    v1RelayOpen:
      type: object
      properties:
        relayIndex:
          type: integer
          format: int32
          example: 1
          title: |-
            Индекс реле.
            Диапазон: 1..32767
          maximum: 32767
          minimum: 1
        lockType:
          title: Тип замка
          allOf:
            - $ref: "#/components/schemas/RelayOpenLockType"
        openTimeGeneral:
          type: integer
          format: int32
          example: 10
          title: |-
            Общее время открытия.
            Диапазон: 1..200
          maximum: 200
          minimum: 1
        openTimeEmergency:
          type: integer
          format: int32
          example: 10
          title: |-
            Время открытия в секундах при экстренном оповещении.
            При 0 - до конца экстренного оповещения.
            Диапазон: 0..3600
          maximum: 3600
      title: Настройки открытия реле
      required:
        - relayIndex
    v1RelayState:
      type: object
      properties:
        relayIndex:
          type: integer
          format: int32
          example: 1
          title: |-
            Индекс реле.
            Диапазон: 1..32767
          maximum: 32767
          minimum: 1
        stateType:
          title: Состояние
          allOf:
            - $ref: "#/components/schemas/v1RelayStateStateType"
      title: Состояние реле
      required:
        - relayIndex
    v1RelayStateStateType:
      type: string
      enum:
        - OPEN_TEMPORARY
        - CLOSED
        - OPEN_PERMANENT
      description: |-
        - STATE_TYPE_UNKNOWN: Значение не указано
         - OPEN_TEMPORARY: Открыто временно
         - CLOSED: Закрыто
         - OPEN_PERMANENT: Открыто на всегда
      title: Тип состояния
    v1Rfid:
      type: object
      properties:
        id:
          type: string
          title: Идентификатор UID [hex 14]
        description:
          type: string
          title: Описание
        secret:
          type: string
          title: Секрет [hex 14]
        relayIndexes:
          type: array
          items:
            type: integer
            format: int32
          title: |-
            Идентификаторы реле.
            Диапазон: 1..64
      title: Ключ
      required:
        - id
    v1RfidPaging:
      type: object
      properties:
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1RfidSavingError:
      type: object
      properties:
        relayNotFound:
          title: Реле не найдено
          allOf:
            - $ref: "#/components/schemas/v1RfidSavingErrorRelayNotFound"
      title: Ошибка запроса создания ключа
    v1RfidSavingErrorRelayNotFound:
      type: object
      title: Реле не найдено
    v1Room:
      type: object
      properties:
        roomNumber:
          type: string
          example: "325"
          title: Номер квартиры
        sipForwardingNumber:
          type: string
          example: 0041083630014L831
          title: |-
            Номер Sip-переадресации вызова.
            Диапазон: 5..200
          maxLength: 200
          minLength: 5
        analogPhoneCmsNumber:
          type: string
          example: K1E9D8
          title: >-
            Номер координатно-матричной аналоговой трубки.

            Где пример значения K1E9D8 - это К1 = коммутатор 1; Е9 = единицы 9; Д8 = десятки 8.

            Паттерн: /^[A-Za-z]\d[A-Za-z]\d[A-Za-z]\d$/
        analogPhoneDigitalNumber:
          type: integer
          format: int32
          example: "234"
          title: |-
            Номер цифровой трубки.
            Диапазон: 1..255
        isAnalogPhoneBlocked:
          type: boolean
          example: false
          title: Признак блокировки аналоговой (CMS) или адресно-цифровой (digital
            headset) трубки
      title: Квартира
      required:
        - roomNumber
    v1RoomFilter:
      type: object
      properties:
        roomNumbers:
          type: array
          items:
            type: string
          title: |-
            По номерам квартир.
            При пустом массиве удалятся все квартиры
      title: >-
        Фильтр квартир.

        При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ
    v1RoomPaging:
      type: object
      properties:
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1Rtsp:
      type: object
      properties:
        isRtspServerOn:
          type: boolean
          example: true
          title: Флаг включения RTSP сервера
      title: Настройки RTSP
      required:
        - isRtspServerOn
    v1Sac:
      type: object
      properties:
        isSacOn:
          type: boolean
          example: true
          title: Флаг включения Smart Auto Collect
        minFlatNumber:
          type: integer
          format: int32
          example: 325
          title: Минимальный номер квартиры
          maximum: 1000
        maxFlatNumber:
          type: integer
          format: int32
          example: 325
          title: Максимальный номер квартиры
          maximum: 1000
        keyMask:
          type: string
          example: 04**********80
          title: >-
            Маска UID RFID ключа.

            Пример 04**********80 = что означает, что uid ключа должен начинаться с 04, иметь 14 знаков и заканчиваться на 80.

            Пример  ******** = что означает что uid ключа должен н иметь 8 знаков
      title: Настройки Smart Auto Collect
      required:
        - isSacOn
    v1SafeCityEmergencyFile:
      type: object
      properties:
        fileName:
          type: string
          example: Happy_new_year.wav
          title: Имя файла
        content:
          type: string
          format: byte
          example: SGVsbG8gV29ybGQh
          title: |-
            Тело файла, строка в кодировке Base64.
            Не возвращается с сервера.
            TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
      title: Файл оповещения
      required:
        - fileName
    v1SafeCityOsd:
      type: object
      properties:
        isOsdEnabled:
          type: boolean
          example: "true"
          title: Флаг включения OSD
        textline:
          type: string
          example: Lorem ipsum dolor sit amet consectetur adipiscing elit
          title: Текст
        textsize:
          type: integer
          format: int32
          example: 100
          title: Размер текста, пикселей
        placementType:
          title: Размещение текста
          allOf:
            - $ref: "#/components/schemas/SafeCityOsdPlacementType"
        showDatetimeType:
          title: Вариант добавления даты
          allOf:
            - $ref: "#/components/schemas/SafeCityOsdShowDatetimeType"
        isShowFps:
          type: boolean
          example: "true"
          title: Флаг отображения количества кадров в секунду
        isShowBitrate:
          type: boolean
          title: Флаг отображения битрейта
        isShowCountOfStreams:
          type: boolean
          title: Флаг отображения количества потоков
        isShowNameOfDevice:
          type: boolean
          title: Флаг отображения имени устройства
      title: Настройки OSD
    v1SaveCodeListRequest:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Code"
          title: Список Code
      title: Запрос на создание списка кодов доступа
    v1SaveCodeListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Code"
          title: Список Code
        errors:
          type: array
          items:
            $ref: "#/components/schemas/v1SaveCodeListResponseError"
          title: Список ошибок
      title: Ответ на создание списка кодов доступа
    v1SaveCodeListResponseError:
      type: object
      properties:
        code:
          type: string
          example: 456778
          title: Код доступа
          maxLength: 100
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1CodeSavingError"
      title: Ошибка запроса
      required:
        - code
    v1SaveCodeRequest:
      type: object
      properties:
        data:
          title: Код доступа
          allOf:
            - $ref: "#/components/schemas/v1Code"
      title: Запрос создания кода доступа
      required:
        - data
    v1SaveCodeResponse:
      type: object
      properties:
        data:
          title: Код доступа
          allOf:
            - $ref: "#/components/schemas/v1Code"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveCodeResponseError"
      title: Ответ на запрос создания кода доступа
    v1SaveCodeResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1CodeSavingError"
      title: Ошибка запроса
    v1SaveEncryptionProfileRequest:
      type: object
      properties:
        data:
          title: Профиль шифрования
          allOf:
            - $ref: "#/components/schemas/devicev1EncryptionProfile"
      title: Запрос на создание сущности EncryptionProfile
      required:
        - data
    v1SaveEncryptionProfileResponse:
      type: object
      properties:
        data:
          title: Профиль шифрования
          allOf:
            - $ref: "#/components/schemas/devicev1EncryptionProfile"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveEncryptionProfileResponseError"
      title: Ответ на запрос на создание сущности EncryptionProfile
    v1SaveEncryptionProfileResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1EncryptionProfileSavingError"
      title: Ошибка запроса
    v1SaveGateModeRequest:
      type: object
      properties:
        data:
          title: Настройки Gate режима
          allOf:
            - $ref: "#/components/schemas/v1GateMode"
      title: Запрос редактирования Gate режима
      required:
        - data
    v1SaveGateModeResponse:
      type: object
      properties:
        data:
          title: Настройки Gate режима
          allOf:
            - $ref: "#/components/schemas/v1GateMode"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveGateModeResponseError"
      title: Ответ на запрос редактирования Gate режима
    v1SaveGateModeResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1SaveRfidListRequest:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Rfid"
          title: Список Rfid
      title: Запрос на редактирование списка сущностей Rfid
    v1SaveRfidListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Rfid"
          title: Список Rfid
        errors:
          type: array
          items:
            $ref: "#/components/schemas/v1SaveRfidListResponseError"
          title: Список ошибок
      title: Ответ на запрос на редактирование списка сущностей Rfid
    v1SaveRfidListResponseError:
      type: object
      properties:
        id:
          type: string
          title: Идентификатор UID [hex 14]
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1RfidSavingError"
      title: Ошибка запроса
      required:
        - id
    v1SaveRfidRequest:
      type: object
      properties:
        data:
          title: Ключ
          allOf:
            - $ref: "#/components/schemas/v1Rfid"
      title: Запрос на создания/редактирование сущности Rfid
      required:
        - data
    v1SaveRfidResponse:
      type: object
      properties:
        data:
          title: Ключ
          allOf:
            - $ref: "#/components/schemas/v1Rfid"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveRfidResponseError"
      title: Ответ на запрос на создания/редактирование сущности Rfid
    v1SaveRfidResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/v1RfidSavingError"
      title: Ошибка запроса
    v1SaveRoomListRequest:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Room"
          title: Список Room
      title: Запрос сохранения списка настроек квартиры
    v1SaveRoomListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Room"
          title: Список Room
        errors:
          type: array
          items:
            $ref: "#/components/schemas/v1SaveRoomListResponseError"
          title: Список ошибок
      title: Ответ на запрос сохранения списка настроек квартиры
    v1SaveRoomListResponseError:
      type: object
      properties:
        roomNumber:
          type: string
          example: "325"
          title: Номер квартиры
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
      required:
        - roomNumber
    v1SaveRoomRequest:
      type: object
      properties:
        data:
          title: Квартира
          allOf:
            - $ref: "#/components/schemas/v1Room"
      title: Запрос сохранения настроек квартиры
      required:
        - data
    v1SaveRoomResponse:
      type: object
      properties:
        data:
          title: Квартира
          allOf:
            - $ref: "#/components/schemas/v1Room"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveRoomResponseError"
      title: Ответ на запрос сохранения настроек квартиры
    v1SaveRoomResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1SaveRtspRequest:
      type: object
      properties:
        data:
          title: Настройки RTSP
          allOf:
            - $ref: "#/components/schemas/v1Rtsp"
      title: Запрос редактирования настроек RTSP
      required:
        - data
    v1SaveRtspResponse:
      type: object
      properties:
        data:
          title: Настройки RTSP
          allOf:
            - $ref: "#/components/schemas/v1Rtsp"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1SaveRtspResponseError"
      title: Ответ на запрос редактирования настроек RTSP
    v1SaveRtspResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1SaveSafeCityEmergencyFileRequest:
      type: object
      properties:
        data:
          title: Файл оповещения
          allOf:
            - $ref: "#/components/schemas/v1SafeCityEmergencyFile"
      title: Запрос загрузки файла на устройство
      required:
        - data
    v1SaveSafeCityEmergencyFileResponse:
      type: object
      title: Ответ на запрос загрузки файла на устройство
    v1SaveUserRequest:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
      title: Запрос на создания/редактирование сущности User
      required:
        - data
    v1SaveUserResponse:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
      title: Ответ на запрос на создания/редактирование сущности User
    v1SipAccount:
      type: object
      properties:
        accountId:
          type: string
          example: "1454647"
          title: ID Sip-аккаунта
        name:
          type: string
          example: "0018155318002"
          title: Имя
        number:
          type: string
          example: "45464738"
          title: Номер
        user:
          type: string
          example: admin
          title: Имя пользователя
        password:
          type: string
          example: pwd_admin
          title: |-
            Пароль.
            Не возвращается с сервера.
            TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
        regServerAddress:
          type: string
          example: reg.acme.io:5060
          title: |-
            Адрес REG-сервера.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:5060, reg.acme.io:5060
          minLength: 5
        sipServerAddress:
          type: string
          example: sip.acme.io:5060
          title: |-
            Адрес SIP-сервера.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:5060, sip.acme.io:5060
          minLength: 5
        sipProxyAddress:
          type: string
          example: proxy.acme.io:5060
          title: |-
            Адрес SIP-прокси.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:5060, proxy.acme.io:5060
          minLength: 5
      title: Sip-аккаунт
      required:
        - accountId
    v1SipTimeoutSettings:
      type: object
      properties:
        callTimeout:
          type: integer
          format: int32
          example: 100
          title: Максимальное время дозвона в секундах
          maximum: 2000
          minimum: 1
        talkTimeout:
          type: integer
          format: int32
          example: 100
          title: Максимальное время общения в секундах
          maximum: 2000
          minimum: 1
      title: Настройки максимального времени общения и дозвона
    v1Sos:
      type: object
      properties:
        isSosOn:
          type: boolean
          example: true
          title: Флаг включения SOS вызова
        sipInvite:
          type: string
          example: +74712999999_tag1=+7471334455_tag2=10.20.30.40
          title: |-
            Параметр SIP Invite для SOS вызова.
            Произвольная строка которая передается в SIP сервер.
            Диапазон: 1..128
          maxLength: 128
          minLength: 1
        sipServer:
          type: string
          example: sip.acme.io:5060
          title: |-
            Параметр SIP Server для SOS вызова.
            При пустом sip_server будет использован сервер SIP регистрации
      title: Настройки SOS
      required:
        - isSosOn
        - sipInvite
    v1SyslogSettings:
      type: object
      properties:
        protocolType:
          title: Тип протокола
          allOf:
            - $ref: "#/components/schemas/SyslogSettingsProtocolType"
        address:
          type: string
          example: syslog.acme.io:514
          title: |-
            Адрес Syslog-сервера.
            Сетевой адрес и порт.
            Пример: 192.168.0.1:514, syslog.acme.io:6514
          minLength: 5
        logLevelType:
          title: Уровень логирования
          allOf:
            - $ref: "#/components/schemas/SyslogSettingsLogLevelType"
      title: Настройки Syslog-сервера
    v1Ticker:
      type: object
      properties:
        modeType:
          title: Режим строки
          allOf:
            - $ref: "#/components/schemas/TickerModeType"
        speed:
          type: integer
          format: int32
          example: 200
          title: Скорость, символов в минуту
        delay:
          type: integer
          format: int32
          example: 3
          title: Задержка смены строки, секунд
        lines:
          type: array
          example:
            - Lorem ipsum dolor sit amet
            - consectetur adipiscing elit
            - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
          items:
            type: string
            minLength: 5
          title: Строки
      title: Настройки Ticker
    v1User:
      type: object
      properties:
        username:
          type: string
          example: johnDoe
          title: Имя пользователя
        password:
          type: string
          example: "***"
          title: |-
            Пароль.
            Не возвращается с сервера.
            TODO: в генерации сваггера не показывать INPUT_ONLY поля в ответах
        permission:
          type: array
          example:
            - permission_name: can_alarm
              is_enabled: true
            - permission_name: can_reboot
              is_enabled: false
          items:
            $ref: "#/components/schemas/UserPermission"
          title: Права доступа
      title: Пользователь
      required:
        - username
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования прото
        message:
          type: string
          title: Валидационное сообщение
      title: Ошибки валидации
      required:
        - path
        - message
    v1VideoChannel:
      type: object
      properties:
        chanelNumber:
          type: integer
          format: int32
          example: 0
          title: Порядковый номер видеоконфига
          maximum: 10
        isEnabled:
          type: boolean
          example: true
          title: Флаг активности
        resolutionType:
          title: Тип разрешения видео
          allOf:
            - $ref: "#/components/schemas/VideoChannelResolutionType"
        formatType:
          title: Формат видео
          allOf:
            - $ref: "#/components/schemas/VideoChannelFormatType"
        profileType:
          title: Профиль
          allOf:
            - $ref: "#/components/schemas/VideoChannelProfileType"
        fps:
          type: integer
          format: int32
          example: 25
          title: Частота кадров
          maximum: 30
          minimum: 1
        gop:
          type: integer
          format: int32
          example: 25
          title: Периодичность опорного кадра
          maximum: 200
          minimum: 1
        flowControlModeType:
          title: Режим FlowControlModeType
          allOf:
            - $ref: "#/components/schemas/VideoChannelFlowControlModeType"
        biterate:
          type: integer
          format: int32
          example: 100
          title: Целевая скорость потока, килобит
          maximum: 16000
          minimum: 100
        isRtspAudio:
          type: boolean
          example: true
          title: Флаг rtsp_audio
        isUsedForSip:
          type: boolean
          example: true
          title: Флаг use for sip
      title: Настройки видеоконфига
      required:
        - chanelNumber
        - isEnabled
  securitySchemes:
    basicAuth:
      type: basic
externalDocs:
  url: https://openapi-deviceapis.deploy.rtkit.dev/deviceapis_device_v1/
  description: Documentation
servers:
  - url: /
    description: Default
  - url: "{deviceAddress}/"
    description: Device
    variables:
      deviceAddress:
        default: https://192.168.0.1:443
        description: Device address
