API документация

Ufanet Intercom HTTP API (UIHA)

Ответ на запрос может быть либо пустым, либо типа application/json, либо в случае ошибки — строкой с описанием ошибки.

Получение конфигурации домофона
Пример ответа (конфигурация домофона по умолчанию):
```json
{
    "system": {
        "loglevel": -1
    },
    "sip": {
        "domain": "127.0.0.1:5060",
        "user": "user",
        "password": "password"
    },
    "commutator": {
        "type": "VIZIT",
        "mode": 1,
        "ap_min": 1,
        "ap_max": 36,
        "ap_shift": 0,
        "ap_cnt": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
        ]
    },
    "volume": {
        "speaker": 8.0,
        "mic": 8.0
    },
    "display": {
        "rotate": false,
        "labels": [
            "",
            "",
            ""
        ],
        "localization": {
            "ENTER_APARTMENT": "ENTER APARTMENT",
            "ENTER_PREFIX": "ENTER PREFIX",
            "CALL": "CALL",
            "CALL_GATE": "CALL GATE",
            "CONNECT": "CONNECT",
            "OPEN": "OPEN",
            "FAIL_NO_CLIENT": "FAIL NO CLIENT",
            "FAIL_NO_APP_AND_FLAT": "FAIL NO APP AND FLAT",
            "FAIL_LONG_SPEAK": "FAIL LONG SPEAK",
            "FAIL_NO_ANSWER": "FAIL NO ANSWER",
            "FAIL_UNKNOWN": "FAIL UNKNOWN",
            "FAIL_BLACK_LIST": "FAIL BLACK LIST",
            "FAIL_LINE_BUSY": "FAIL LINE BUSY"
        }
    },
    "door": {
        "open_time": 3.0,
        "lock_invert": false,
        "autocollect": "",
        "unlock": "",
        "ble_open": false,
        "ble_password": "",
        "ble_rssi": -80,
        "rfid_pass_en": true,
        "rfid_password": "",
        "dtmf_open_local": ["#", "2"],
        "dtmf_open_remote": "#"
    },
    "backlight": {
        "level": 50
    }
}
Запись конфигурации домофона
Конфигурация домофона обновляется в соответствии с запросом. Поля, отсутствующие в запросе, принимают значения по умолчанию.
Изменение конфигурации домофона
Конфигурация домофона обновляется в соответствии с запросом. Значение полей, отсутствующих в запросе, остаётся без изменений.
Получение информации о квартире
{id} — номер квартиры либо одно из значений: SOS, CONS, KALITKA, FRSI.
Пример ответа (наcтройки квартиры по умолчанию):
```json
{
    "sip_number": "",
    "analog": true,
    "sip": true,
    "map": 0
}
```
Запись информации о квартире
{id} — номер квартиры либо одно из значений: SOS, CONS, KALITKA, FRSI. Квартира должна быть создана перед запросом. Поля, отсутствующие в запросе, принимают значения по умолчанию.
Изменение информации о квартире
{id} — номер квартиры либо одно из значений: SOS, CONS, KALITKA, FRSI. Квартира должна быть создана перед запросом. Значение полей, отсутствующих в запросе, остаётся без изменений
Создание квартиры
{id} — номер квартиры либо одно из значений: SOS, CONS, KALITKA, FRSI
Удаление квартиры
{id} — номер квартиры либо одно из значений: SOS, CONS, KALITKA, FRSI
Получение информации о квартирах
Пример ответа:
```json
{
    "5": {
        "sip_number": "xz2c@192.168.0.184",
        "analog": true,
        "sip": true,
        "map": 0
    },
    "FRSI": {
        "sip_number": "53669@lenny.from-nv.com",
        "analog": true,
        "sip": true,
        "map": 0
    },
    "6": {
        "sip_number": "z3c@Xperia-Z3-Compact.ufanet.ru",
        "analog": true,
        "sip": true,
        "map": 0
    },
    "4": {
        "sip_number": "t@engineer13.ufanet.ru",
        "analog": true,
        "sip": true,
        "map": 0
    }
}
```
Запись информации о квартирах
Список квартир с их настройками обновляется в соответствии с запрососм. Поля, отсутствующие в запросе, принимают значения по умолчанию
Создание ключа
{id} — ключ в десятичном формате. В теле запроса JSON-строка с описанием ключа
Удаление ключа
{id} — ключ в десятичном формате. В теле запроса JSON-строка с описанием ключа.
Получение информации о ключах
Пример ответа:
{
"10931015": "",
"5031159": ""

}
Запись информации о ключах
Список ключей с их описаниями обновляется в соответствии с запросом
Открытие двери
{id} — номер двери: 1 или 2.
Загрузка файлов (на ТОП 2.99)
Параметр `name` в запросе может принимать одно из значений: IMAGE, BELL, OPEN, ERROR. Для IMAGE загружаемый файл должен иметь формат JPEG 480x320, без EXIF и комментариев в метаданных. Для BELL, OPEN, ERROR - формат WAV mono 8 bit. Размер файла - не более 128000 байт.
Вывод сообщения на экран (на ТОП 2.99)
Пример ответа:
```json
{
    "text": "Привет",
    "duration": 5
}
```
Пример ответа:
sipreg - состояние SIP регистрации
```json
{
    "sipreg": true
}
```

Управление камерой (Скачать)


# OpenIPC HTTP API

## Общая информация

API приближённо соответствует документам:

* [DAHUA IPC HTTP API V1.00x](https://community.jeedom.com/uploads/short-url/tTQJPaNah7gZnU12VGGN9ZHEhOk.pdf)
* [DAHUA HTTP API V2.89](https://ipcamtalk.com/threads/latest-version-of-dahua-http-api-for-ipc-documentation.45213/)
* [AMCREST HTTP Protocol API Specifications Rev. 2.13](https://drive.google.com/file/d/1VM2Tb-q4PhmZuvLxSk5OwWInbFxUuTR-/view)

Параметры запросов:

* Номер порта - 85
* Логин - admin
* Пароль (заводские настройки) - 123456

## configManager.cgi

### Установка параметров

`action=setConfig`

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/configManager.cgi?action=setConfig&Encode[0].MainFormat[0].AudioEnable=true
```

Поддерживаемые параметры:

### Agent.Enable
* `true` - включить Agent
* `false` - отключить Agent

### Agent.Address
Адрес сервера для подключения агента. По умолчанию `camagent.ufanet.ru`

### Autoupdate.Enable
* `true` - включить автообновление
* `false` - отключить автообновление

### Autoupdate.Address
Адрес сервера автообновлений

### Encode[0].MainFormat[0].AudioEnable
* `true` - аудио вкл.
* `false` - аудио выкл.

### Encode[0].MainFormat[0].Audio.Compression
Аудиокодек:
* `mp3`
* `opus`
* `aac`
* `pcm`
* `alaw`
* `ulaw`

### Encode[0].MainFormat[0].Audio.Frequency
Частота дискретизации аудио в [Гц]

### Encode[0].MainFormat[0].VideoEnable
* `true` - основной поток (/stream=0) видео вкл.
* `false` - видео выкл.

### Encode[0].MainFormat[0].Video.BitRate
Видео битрейт в [kbps]

### Encode[0].MainFormat[0].Video.BitRateControl
Режим работы RC (Rate Control):
* `avbr` (Adaptive Variable BitRate)
* `cbr` (Constant BitRate)
* `vbr` (Variable BitRate)

### Encode[0].MainFormat[0].Video.Compression
Видеокодек:
* `h264`
* `h265`

### Encode[0].MainFormat[0].Video.FPS
Частота кадров

### Encode[0].MainFormat[0].Video.GOP
Количество опорных кадров в 1 секунде (от 0.1 до 20)

### Encode[0].MainFormat[0].Video.GOPmode
Режим работы GOP:
* `normal`
* `dual`
* `smart`

### Encode[0].MainFormat[0].Video.resolution
Разрешение, например, `1920x1080` (допускаются только четные значения; количество пикселей должно быть кратным 256, например, 1920*1080=2073600 кратно 256)

Аналогичные параметры видео для дополнительного потока (/stream=1):

### Encode[0].ExtraFormat[0].VideoEnable
### Encode[0].ExtraFormat[0].Video.BitRate
### Encode[0].ExtraFormat[0].Video.BitRateControl
### Encode[0].ExtraFormat[0].Video.Compression
### Encode[0].ExtraFormat[0].Video.FPS
### Encode[0].ExtraFormat[0].Video.GOP
### Encode[0].ExtraFormat[0].Video.GOPmode
### Encode[0].ExtraFormat[0].Video.resolution

Аудио параметры для потоков общие (для `Encode[0].ExtraFormat[0].Video.BitRateControl` допустим только `avbr`)

### MotionDetect[0].Enable
* `true` - детектор движения вкл.
* `false` - детектор движения выкл.

### MotionDetect[0].EventHandler.Dejitter
Минимальное время в секундах между срабатываниями детектора движения в диапазоне 0 — 30

### MotionDetect[0].EventHandler.WebHookURL
URL, на который отправляется сообщение о срабатывании детектора движения. Пример:
```
http://10.0.8.196/admin/api/v0/event/rvi/json/{stream_number}
```

### MotionDetect[0].MotionDetectWindow[0].ROI
Область отслеживания. Формат: XxYxWxH, например, 0x0x500x500. По умолчанию — весь кадр. Для сброса в значение по умолчанию достаточно указать пустое значение: `MotionDetect[0].MotionDetectWindow[0].ROI=''`
* `X` - x-координата левого верхнего угла
* `Y` - y-координата левого верхнего угла
* `W` - ширина
* `H` - высота

### MotionDetect[0].MotionDetectWindow[0].Sensitive
Чувствительность детектора движения в диапазоне 1 — 50

### MotionDetect[0].MotionDetectWindow[0].SkipIn
Область исключения отслеживания. Формат: XxYxWxH, например, 200x200x100x100. По умолчанию — нулевая область. Для сброса в значение по умолчанию достаточно указать пустое значение: `MotionDetect[0].MotionDetectWindow[0].SkipIn=''`
* `X` - x-координата левого верхнего угла
* `Y` - y-координата левого верхнего угла
* `W` - ширина
* `H` - высота

### MotionDetect[0].Visualize
* `true` - визуализация детектора движения вкл.
* `false` - визуализация детектора движения выкл.

### NTP.Address
Адрес NTP-сервера

### NTP.TimeZone
Имя часового пояса из [tz database](https://www.iana.org/time-zones), например, `Asia/Yekaterinburg`

### PrivacyMasking[0].Enable
* `true` - вкл приватную маску
* `false` - выкл

*Примечание:
`PrivacyMasking[0].Enable` также управляет включением и выключением OSD*

### PrivacyMasking[0].Rect
Координаты прямоугольника `PrivacyMasking[0].Rect=100x110x500x1000`. Формат координат: x, y верхней левой точки, ширина и высота в пикселях. Есть возможность через запятую указывать координаты до 5 прямоугольников: `1854x1304x216x606,1586x1540x482x622`. Для сброса маски достаточно указать пустое значение: `PrivacyMasking[0].Rect=''`

### RTSP.Block
* `false` - разблокировать 554 порт
* `true` - заблокировать 554 порт

### Syslog.Address
Адрес сервера для отправки логов в соответствии со стандартом syslog по протоколу UDP. Значение в формате `адрес[:порт]`. Если порт не указан, то используется порт по умолчанию `514`. Пустая строка - логи ведутся только локально

### Syslog.Level
Уровень логирования 1 — 8. В syslog попадают только логи с уровнем меньше, чем значение этого параметра

### VideoColor[0][0].Brightness
Яркость изображения в диапазоне 1 — 100, либо автоматический режим — auto

### VideoColor[0][0].Contrast
Контрастность изображения в диапазоне 1 — 100, либо автоматический режим — auto

### VideoColor[0][0].Hue
Цветовой тон изображения в диапазоне 1 — 100

### VideoColor[0][0].Saturation
Насыщенность изображения в диапазоне 1 — 100

### VideoImageControl[0].Flip
* `true` - включить функцию переворота видео вертикально
* `false` - отключить функцию переворота видео вертикально

### VideoImageControl[0].Mirror
* `true` - включить функцию отражения видео горизонтально
* `false` - отключить функцию отражения видео горизонтально

### VideoImageControl[0].Rotate90
Вращение видео:
* `0` - без вращения
* `1` - по часовой стрелке повернуть на 90°
* `2` - против часовой стрелки повернуть на 90°

### VideoInContourLight[0][0].Mode
* `0` - компенсация контрового света выкл.
* `1` - компенсация контрового света вкл.

### VideoInDayNight[0].Mode
* `Color` - всегда дневной режим
* `Brightness` - день/ночь авто
* `BlackWhite` - всегда ч/б
* `Schedule` - день/ночь по расписанию

### VideoInDayNight[0].BW.Time
Время включения ночного режима, например, `21:00`

### VideoInDayNight[0].Color.Time
Время включения дневного режима, например, `9:00`

### VideoInDayNight[0].Delay
Задержка переключения дня и ночи от 3 сек до 10 сек

### VideoInDayNight[0].Light.Brightness
Яркость подсветки или мощность фонарика. Диапазон от 0 до 100, где 0 - подсветка отключена, 100 - яркость на максимум. Соотвественно при значении 50 подсветка будет включаться в половину мощности от максимальной яркости

### VideoInDayNight[0].Sensitivity
Чувствительность переключения для автоматического переключения дня и ночи от 1 до 8 птенчиков

### VideoInOptions[0].NightOptions.Profile
* `0` - временно дневной режим
* `1` - временно ночной режим
* `другие значения` - сброс на авто (перезапустить поток)

### VideoInWDR[0][0].Mode
* `0` - WDR выкл.
* `1` - WDR вкл. (слабый режим)
* `2` - WDR вкл. (средний режим)
* `3` - WDR вкл. (сильный режим)
* `4` - WDR вкл. (супер режим)

### VideoWidget[0].TimeTitle.FrontColor[3]
* `0` - OSD выкл.
* `1..255` - OSD вкл.

### VideoWidget[0].TimeTitle.Rect[0]
Положение OSD (X-координата). Отрицательное значение означает смещение относительно правого края

### VideoWidget[0].TimeTitle.Rect[1]
Положение OSD (Y-координата). Отрицательное значение означает смещение относительно нижнего края

### Locales.TimeFormat
Сообщение OSD, например, `"%F %T"`. Поддерживается форматирование [strftime](https://man7.org/linux/man-pages/man3/strftime.3.html)

### Получение параметров

`action=getConfig`

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/configManager.cgi?action=getConfig&name=Encode
```

Вывод:
```
table.Encode[0].MainFormat[0].AudioEnable=false
table.Encode[0].MainFormat[0].Video.BitRateControl=vbr
table.Encode[0].MainFormat[0].Video.BitRate=2048
table.Encode[0].MainFormat[0].Video.Compression=h264
table.Encode[0].MainFormat[0].Audio.Frequency=8000
table.Encode[0].MainFormat[0].VideoEnable=true
```

Поддерживаемые параметры:

### Agent
* Agent.Enable
* Agent.Address

### Autoupdate
* Autoupdate.Enable
* Autoupdate.Address

### Encode
* Encode[0].MainFormat[0].AudioEnable
* Encode[0].MainFormat[0].Audio.Compression
* Encode[0].MainFormat[0].Audio.Frequency
* Encode[0].MainFormat[0].VideoEnable
* Encode[0].MainFormat[0].Video.BitRate
* Encode[0].MainFormat[0].Video.BitRateControl
* Encode[0].MainFormat[0].Video.Compression
* Encode[0].MainFormat[0].Video.FPS
* Encode[0].MainFormat[0].Video.GOP
* Encode[0].MainFormat[0].Video.GOPmode
* Encode[0].MainFormat[0].Video.resolution
* Encode[0].ExtraFormat[0].VideoEnable
* Encode[0].ExtraFormat[0].Video.BitRate
* Encode[0].ExtraFormat[0].Video.BitRateControl
* Encode[0].ExtraFormat[0].Video.Compression
* Encode[0].ExtraFormat[0].Video.FPS
* Encode[0].ExtraFormat[0].Video.GOP
* Encode[0].ExtraFormat[0].Video.GOPmode
* Encode[0].ExtraFormat[0].Video.resolution

### Locales
* Locales.TimeFormat

### MotionDetect
* MotionDetect[0].Enable
* MotionDetect[0].EventHandler.Dejitter
* MotionDetect[0].EventHandler.WebHookURL
* MotionDetect[0].MotionDetectWindow[0].ROI
* MotionDetect[0].MotionDetectWindow[0].Sensitive
* MotionDetect[0].MotionDetectWindow[0].SkipIn
* MotionDetect[0].Visualize

### NTP
* NTP.Address
* NTP.TimeZone

### Network
* Network.*interface*.PhysicalAddress
* Network.*interface*.IPAddress
* Network.*interface*.DefaultGateway
* Network.*interface*.SubnetMask
* Network.*interface*.DnsServers[0]
* Network.*interface*.DnsServers[1]

### PrivacyMasking
* PrivacyMasking[0].Enable
* PrivacyMasking[0].Rect

### RTSP
* RTSP.Block

### Syslog
* Syslog.Address
* Syslog.Level

### VideoColor
* VideoColor[0][0].Brightness
* VideoColor[0][0].Contrast
* VideoColor[0][0].Hue
* VideoColor[0][0].Saturation

### VideoImageControl
* VideoImageControl[0].Flip
* VideoImageControl[0].Mirror
* VideoImageControl[0].Rotate90

### VideoInContourLight
* VideoInContourLight[0][0].Mode

### VideoInDayNight
* VideoInDayNight[0].Mode
* VideoInDayNight[0].BW.Time
* VideoInDayNight[0].Color.Time
* VideoInDayNight[0].Delay
* VideoInDayNight[0].Light.Brightness
* VideoInDayNight[0].Sensitivity

### VideoInWDR
* VideoInWDR[0][0].Mode

### VideoWidget
* VideoWidget[0].TimeTitle.FrontColor
* VideoWidget[0].TimeTitle.Rect[0]
* VideoWidget[0].TimeTitle.Rect[1]

## magicBox.cgi

### Запрос модели устройства

`action=getMachineName`

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/magicBox.cgi?action=getMachineName
```

Пример ответа:
```
name=BMSCGL500
```

### Запрос серийного номера

`action=getSerialNo`

Пример ответа:
```
sn=6801780337772
```

### Запрос версии прошивки

`action=getSoftwareVersion`

Пример ответа:
```
version=2.3.02.10
kernel=2023060714
```

### Запрос состояния стримера

`action=getStreamerState`

Пример ответа:
```
streamerState=up
```

### Запрос uptime

`action=getUptime`

Пример ответа:
```
uptime=90047.46
```

### Перезагрузка камеры

`action=reboot`

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/magicBox.cgi?action=reboot
```

### Сброс на заводские настройки

`action=resetSystemEx`

Выполнение сброса занимает 1-2 минуты. После сброса камера автоматически перезагружается

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/magicBox.cgi?action=resetSystemEx
```

## upgrader.cgi

Отправка данных методом POST, тип содержимого [`multipart/form-data`](https://datatracker.ietf.org/doc/html/rfc2388)

Выполнение обновления занимает 1-2 минуты. После обновления камера автоматически перезагружается

### Обновление ядра

Пример команды, отправляющей файл ядра `uImage`:
```
curl -u admin:123456 -F kernel=@uImage http://192.168.0.141:85/cgi-bin/upgrader.cgi
```

### Обновление файловой системы

Пример команды, отправляющей файл образа файловой системы `rootfs.squashfs`:
```
curl -u admin:123456 -F rootfs=@rootfs.squashfs http://192.168.0.141:85/cgi-bin/upgrader.cgi
```

## Скрины

Скрины доступны на 85 порту по адресу:
```
http://192.168.0.188:85/image.jpg
```
или с указанием размеров:
```
http://192.168.0.188:85/image.jpg?width=640&height=360
```

## userManager.cgi

### Смена пароля

`action=modifyPassword`

Необходимо указать в запросе имя пользователя `admin`, новый и старый пароль

Пример GET-запроса:
```
http://admin:123456@192.168.0.141:85/cgi-bin/userManager.cgi?action=modifyPassword&name=admin&pwd=67890&pwdOld=12345
```