wiki/ru/hikvision-ds-2cd2345f-is.md

168 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# OpenIPC Wiki
[Оглавление](../index.md)
Hikvision DS-2CD2345F-IS
--------------
**Внимание, на данный момент это просто рабочие заметки, а НЕ полная инструкция к действию !**
Среди камер продаваемых Ростелекомом существует модель Hikvision DS-2CD2345F-IS. От большинства прочих отличается тем, что оригинальной прошивки для неё, судя по всему, нет. Но железо поддерживается OpenIPC и значит не всё потеряно.
## Текущая ситуация
- В настоящее время удалось запустить сборку для процессора hi3516av100, т.к. только в ней есть поддержка памяти NAND, а всё остальное идентично сборке для hi3516av100.
- Последняя протестированная работающая сборка - от 27.05.22 Сборка от 6.10.22 запускается, но в ней отсутствует eth0. Причина выясняется.
- В протестированной сборке отсутствует поддержка UBIFS, поэтому периодически настройки каеры слетают к дефолтным значениям.
- Переключение день/ночь реализовано дополнительным скриптом. Есть определённые проблемы на границах тёмного и светлого времени суток - в сумерках многократно переключается то в один то в другой режим.
- Микрофон не работает.
- Запись на карпту памяти не тестировал.
## Платформа
- процессор hi3516dv100
- сенсор ov4689
- объём ОЗУ 128Мб
- объём ПЗУ 128Мб
- тип ПЗУ NAND
## Прошивка
### Переменные окружения
```
setenv soc hi3516av100
setenv sensor ov4689
setenv totalmem 128M
setenv osmem 32M
setenv bootargs 'mem=32M console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=hinand:1024k(boot),1024k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'setenv setargs setenv bootargs ${bootargs}; run setargs; nand read 0x82000000 0x200000 0x200000; bootm 0x82000000'
setenv ethaddr 00:12:34:56:78:90 //задать MAC-адрес камеры, если не задан
setenv ipaddr 192.168.1.10 //задать IP-адрес камеры, если не задан
setenv serverip 192.168.1.2 //задать адрес компа с TFTP-сервером
```
### Образы ядра и файловой системы
```
mw.b 0x82000000 0xff 0x1000000
tftp 0x82000000 uImage.${soc}
nand erase 0x200000 0x200000
nand write.i 0x82000000 0x200000 0x200000
mw.b 0x82000000 0xff 0x1000000
tftp 0x82000000 rootfs.squashfs.${soc}
nand erase 0x400000 0x500000
nand write 0x82000000 0x400000 0x500000
reset
```
Можно вводить команды одной строкой через **;**, но лучше построчно, чтобы контролировать выполнение.
### Первый запуск
После загрузки системы нужно войти под пользователем root без пароля и выполнить команду **firstboot**. Система выполнит необходимые операции и перезапустится. Если не перезапустилась, то сделать это командой **reboot**.
Затем снова войти в бут и почистить память:
```
nand erase 0x900000 0x7700000
reset
```
Эту же операцию нужно выполнить, если происходят сбои по вине неподходящей файловой системы. Но то же самое можно сделать и через веб-интерфейс.
### Веб-интерфейс
Веб-интерфейс по умолчанию доступен по порту **85**. Логин: **admin**, пароль: **12345**. При первом входе будет предложено задать новый сложный пароль. Сам использую англоязычный интерфейс, поэтому и все пункты меню буду приводить тоже на английском. Основная часть системы — стример **Majestic**. Он выполняет функции захвата и трансляции изображения и делает всё остальное, что с этим связано. Надо настроить.
#### Majestic->Majestic settings
##### ISP
- В поле **Path to sensor configuration file** выбрать **/etc/sensors/ov4689_i2c_1080p.ini**
##### VIDEO0
- Включить **Enable Video0**
- Выбрать **Video0 codec: h265**
- Задать **Video resolution: 1920×1080**
- Задать **Video frame rate: 25**
- Задать **Video bitrate: 2048**
- Задать **Send I-frame each 1 second: 1**
##### VIDEO1
- Включить **Enable Video1**
- Выбрать **Video0 codec: h265**
- Задать **Video resolution: 704×576**
- Задать **Video frame rate: 25**
- Задать **Video bitrate: 512**
- Задать **Send I-frame each 1 second: 1**
После проведения указанных манипуляций сохранить изменения — видео настроено. В разделе **Preview** картинку можно увидеть только для JPEG и MJPEG. Просмотр видео работает не всегда — баг это или фича, разбираемся.
Увидеть картинку можно через VLC, выбрав в меню пункт Открыть URL и введя одну из строк:
- rtsp://admin:password@ip-address:554/stream=0 — первый поток
- rtsp://admin:password@ip-address:554/stream=1 — второй поток
где: password — ваш пароль, ip-address — адрес камеры.
## Переключение день/ночь
При наступлении тёмного времени суток или выключении источников света, как правило, видеокамеры переходят в ночной режим. Происходит перевод изображения в чёрно-белый режим, отключается ИК-фильтр и включается ИК-подсветка. В обратной ситуации производятся обратные действия.
Система может определять отсутствие света либо по датчику, либо по изображению. Пока **Majestic** умеет работать только с датчиком. В этой модели камеры его нет. Значит надо задать параметры управляющих выходов, а управлять ими придётся с помощью скрипта.
### Настройка GPIO
- Включить **Enable night mode**
- Задать **GPIO pin1 of signal for IRcut filter: 105**
- Задать **GPIO pin2 of signal for IRcut filter: 104**
- Задать **GPIO pin to turn on night mode illumination: 114**
Теперь **Majestic** знает про **GPIO** и можно попробовать поуправлять переключением вручную из командной строки через **API**. Нужно войти в систему под пользователем **root** без пароля. Команды следующие:
```
curl http://ip-address/night/on //включить ночной режим.
curl http://ip-address/night/off //выключить ночной режим.
curl http://ip-address/night/toggle //переключить режим.
```
Если всё работает, движемся дальше — автоматизируем процесс управления переключением режима на основе изменения времени экспозиции.
### Скрипт управления переключением режима
Создаём файл файл скрипта:
```
cat > /usr/sbin/checkexp.sh
```
… и вставляем содержимое через буфер обмена:
```
!/bin/sh
login=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f2)
pass=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f3)
chtime=5 #change time to check exptime
chexp=50 #change exptime threshold (40-80)
day=1
while true; do
exp=$(curl -s http://localhost/metrics | grep ^isp_exptime | cut -d' ' -f2)
chexp=50 #change exptime threshold (40-80)
bri=expr $exp / 1000
echo $bri
if [ $bri -gt $chexp -a $day -eq 1 ] ;then
day=0
curl -u $login:$pass http://localhost/night/on
fi
if [ $bri -le $chexp -a $day -eq 0 ] ;then
day=1
curl -u $login:$pass http://localhost/night/off
fi
sleep $chtime
done
```
Сохраняем файл нажав комбинацию **Ctrl+D** и даём разрешение на выполнение:
```
chmod +x /usr/sbin/checkexp.sh
```
Если теперь запустить скрипт, то он начнёт анализировать экспозицию и управлять ночным режимом. В консоль, с интервалом в 5 секунд, будут выдаваться значения экспозиции. Самая простая проверка — накрыть камеру ладонью и через 5 секунд должен раздаться щелчок ИК-фильтра — включится ночной режим. Убрать ладонь и ещё через 5 секунд ночной режим выключится.
Для того, чтобы скрипт запускался автоматически при старте системы, создаём файл запуска:
```
cat > /etc/init.d/S99rc.local
```
… и вставляем содержимое:
```
./usr/sbin/checkexp.sh > /dev/null 2>&1 &
exit 0
```
Сохраняем файл нажав комбинацию *Ctrl+D* и даём разрешение на выполнение:
```
chmod +x /usr/sbin/S99rc.local
```
Теперь можно перезапускать камеру и радоваться что переключение режима, хоть и не идеально, но работает.