From 58ca9ce9a474a5ed2d6984142601a834d5c1b956 Mon Sep 17 00:00:00 2001 From: mixatronik <58383816+mixatronik@users.noreply.github.com> Date: Tue, 1 Nov 2022 17:29:12 +0500 Subject: [PATCH] Update hikvision-ds-2cd2345f-is.md --- ru/hikvision-ds-2cd2345f-is.md | 138 ++++++++++++++++----------------- 1 file changed, 67 insertions(+), 71 deletions(-) diff --git a/ru/hikvision-ds-2cd2345f-is.md b/ru/hikvision-ds-2cd2345f-is.md index 7411e2d..47e13cd 100644 --- a/ru/hikvision-ds-2cd2345f-is.md +++ b/ru/hikvision-ds-2cd2345f-is.md @@ -9,12 +9,11 @@ Hikvision DS-2CD2345F-IS Среди камер продаваемых Ростелекомом существует модель Hikvision DS-2CD2345F-IS. От большинства прочих отличается тем, что оригинальной прошивки для неё, судя по всему, нет. Но железо поддерживается OpenIPC и значит не всё потеряно. ## Текущая ситуация -- В настоящее время удалось запустить сборку для процессора hi3516av100, т.к. только в ней есть поддержка памяти NAND, а всё остальное идентично сборке для hi3516av100. -- Последняя протестированная работающая сборка - от 27.05.22 Сборка от 6.10.22 запускается, но в ней отсутствует eth0. Причина выясняется. -- В протестированной сборке отсутствует поддержка UBIFS, поэтому периодически настройки каеры слетают к дефолтным значениям. +- Нужно использовать сборку для процессора hi3516av100, т.к. только в ней есть поддержка памяти NAND, а всё остальное идентично сборке для hi3516dv100. - Переключение день/ночь реализовано дополнительным скриптом. Есть определённые проблемы на границах тёмного и светлого времени суток - в сумерках многократно переключается то в один то в другой режим. - Микрофон не работает. -- Запись на карпту памяти не тестировал. +- Запись на карту памяти не работает. +- Вход и выход не работают. ## Платформа - процессор hi3516dv100 @@ -29,79 +28,76 @@ Hikvision DS-2CD2345F-IS setenv soc hi3516av100 setenv sensor ov4689 setenv totalmem 128M +setenv osmem 48M +setenv baseaddr 0x82000000 -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 bootargs 'mem=48M console=ttyAMA0,115200 panic=20 init=/init root=ubi0:rootfs rootfstype=ubifs ubi.mtd=3,2048 mtdparts=hinand:256k(boot),768k(wtf),3072k(kernel),-(ubi) of_mdio.higmacphy=0' +setenv bootcmd 'nand read ${baseaddr} 0x100000 0x300000; bootm ${baseaddr}' setenv ethaddr 00:12:34:56:78:90 //задать MAC-адрес камеры, если не задан setenv ipaddr 192.168.1.10 //задать IP-адрес камеры, если не задан setenv serverip 192.168.1.2 //задать адрес компа с TFTP-сервером + +saveenv ``` ### Образы ядра и файловой системы ``` -mw.b 0x82000000 0xff 0x1000000 -tftp 0x82000000 uImage.${soc} -nand erase 0x200000 0x200000 -nand write.i 0x82000000 0x200000 0x200000 +mw.b ${baseaddr} ff 0x1000000 +tftp ${baseaddr} uImage.${soc} +nand erase 0x100000 0x300000 +nand write.i ${baseaddr} 0x100000 0x300000 -mw.b 0x82000000 0xff 0x1000000 -tftp 0x82000000 rootfs.squashfs.${soc} -nand erase 0x400000 0x500000 -nand write 0x82000000 0x400000 0x500000 +mw.b ${baseaddr} ff 0x1000000 +tftp ${baseaddr} rootfs.ubi.${soc} +nand erase 0x400000 0x7c00000 +nand write.i ${baseaddr} 0x400000 ${filesize} reset ``` -Можно вводить команды одной строкой через **;**, но лучше построчно, чтобы контролировать выполнение. -### Первый запуск -После загрузки системы нужно войти под пользователем root без пароля и выполнить команду **firstboot**. Система выполнит необходимые операции и перезапустится. Если не перезапустилась, то сделать это командой **reboot**. -Затем снова войти в бут и почистить память: +Можно вводить команды одной строкой через **;**: ``` -nand erase 0x900000 0x7700000 +mw.b ${baseaddr} ff 0x1000000; tftp ${baseaddr} uImage.${soc}; nand erase 0x100000 0x300000; nand write ${baseaddr} 0x100000 0x300000 + +mw.b ${baseaddr} ff 0x1000000; tftp ${baseaddr} rootfs.ubi.${soc}; nand erase 0x400000 0x7c00000; nand write ${baseaddr} 0x400000 ${filesize} + 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** +##№ Первый запуск +Не прерываем загрузку бута и наблюдаем лог запуска системы. Если всё прошло штатно и в использованной сборке ничего не отломано, то через несколько секунд увидим приглашение входа. Логинимся под пользователем root без пароля и вводим команду ifconfig eth0, чтобы увидеть полученный IP-адрес. +## Веб-интерфейс +Веб-интерфейс по умолчанию доступен по порту 85. Логин: admin, пароль: 12345. При первом входе будет предложено задать новый сложный пароль, который станет также и паролем root при входе в консоль через UART или SSH. +Основная часть системы — стример Majestic. Он выполняет функции захвата и трансляции изображения и делает всё остальное, что с этим связано. Надо настроить. +### Majestic -> Image Signal Processor (ISP) +- В поле Path to sensor configuration file выбрать /etc/sensors/ov4689_i2c_1080p.ini для разрешения 2МП либо /etc/sensors/ov4689_i2c_4M.ini для разрешения 4МП. +### Majestic -> Mainstream Video (Video0) +- Убедиться, что включен переключатель Enable Video0 +- В поле Video0 codec выбрать вариант h265 +### Majestic -> Substream Video (Video1) +- Включить переключатель Enable Video1 +- В поле Video1 codec выбрать вариант h265 +### Settings -> Reset… +- Нажать Reboot Camera для перезапуска. + +В Preview только слайд-шоу, а если хочется видеопотока, то проще всего увидеть его в VLC, выбрав в меню пункт Открыть URL и введя одну из строк: -После проведения указанных манипуляций сохранить изменения — видео настроено. В разделе **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. Для восстановления работоспособности в меню Settings -> Reset… есть пункт Reset Majestic Settings. После его использования надо сделать ещё и Reboot Camera. ## Переключение день/ночь При наступлении тёмного времени суток или выключении источников света, как правило, видеокамеры переходят в ночной режим. Происходит перевод изображения в чёрно-белый режим, отключается ИК-фильтр и включается ИК-подсветка. В обратной ситуации производятся обратные действия. -Система может определять отсутствие света либо по датчику, либо по изображению. Пока **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 умеет работать только с датчиком. В этой модели камеры его нет. Значит надо задать параметры управляющих выходов, а управлять ими придётся с помощью скрипта. +### Пункт меню Majestic -> Night Mode: + Настройка 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 //выключить ночной режим. @@ -116,31 +112,31 @@ cat > /usr/sbin/checkexp.sh ``` … и вставляем содержимое через буфер обмена: ``` -!/bin/sh - +#!/bin/sh +sleep 10 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) +chtime=300 #change time to check isp_again, default 300 sec +chexp=15 #change isp_again threshold (15-30) 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 +exp=$(curl -s http://localhost/metrics | grep ^isp_again | cut -d' ' -f2) +bri=`expr $exp / 1000` +logger "Analog gain $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 + if [ $bri -gt $chexp -a $day -eq 1 ] ;then + day=0 + curl -u $login:$pass http://localhost/night/on + logger "Night mode ON" + fi + + if [ $bri -le $chexp -a $day -eq 0 ] ;then + day=1 + curl -u $login:$pass http://localhost/night/off + logger "Night mode OFF" + fi sleep $chtime done @@ -149,7 +145,7 @@ done ``` chmod +x /usr/sbin/checkexp.sh ``` -Если теперь запустить скрипт, то он начнёт анализировать экспозицию и управлять ночным режимом. В консоль, с интервалом в 5 секунд, будут выдаваться значения экспозиции. Самая простая проверка — накрыть камеру ладонью и через 5 секунд должен раздаться щелчок ИК-фильтра — включится ночной режим. Убрать ладонь и ещё через 5 секунд ночной режим выключится. +Если теперь запустить скрипт, то он начнёт анализировать экспозицию и управлять ночным режимом. По умолчанию интервал проверки задан длительностью 300 секунд, то бишь 5 минут. Для того, чтобы скрипт запускался автоматически при старте системы, создаём файл запуска: ``` @@ -162,6 +158,6 @@ exit 0 ``` Сохраняем файл нажав комбинацию *Ctrl+D* и даём разрешение на выполнение: ``` -chmod +x /usr/sbin/S99rc.local +chmod +x /etc/init.d/S99rc.local ``` Теперь можно перезапускать камеру и радоваться что переключение режима, хоть и не идеально, но работает.