- PVSM.RU - https://www.pvsm.ru -

Видеонаблюдение в подъезде своими силами

Видеонаблюдение в подъезде своими силами - 1

Прочитал относительно недавнюю публикацию о видеонаблюдении и решил описать свой опыт. Считаю мое решение оптимальным по соотношению цена/функциональность, но с удовольствием выслушаю критику более опытных людей.

Итак, задача — минимальными материальными и временными ресурсами сделать видеонаблюдение в подъезде перед входной (в квартиру) дверью. Желательно не записывать круглые сутки “пустые” картинки, т.е. необходимо детектирование движения. Также хорошо бы иметь удаленный доступ к записям.

Аппаратное обеспечение

Сразу сообщу, что учел требования администрации про ограничение рекламы в публикациях, поэтому название производителей там, где это не принципиально, не привожу.
Еще во время ремонта попросил строителей проложить Ethernet-кабель в подъезд над дверью. Питания там нет, поэтому пришлось купить PoE инжектор за 600 рублей. Длина кабеля – 10 метров.

Камеру купил купольную антивандальную за 5000 тысяч рублей с питанием PoE известной в этих кругах китайской компании. Подключить в подъезде USB камеру технически непросто.
WiFi камера не решила бы проблему, т.к. питание к ней в любом случае надо вести.

Видеорегистратор показался очень дорогим, поэтому купил одноплатный компьютер Odroid C2 за 3900 рублей. Но самое главное в выборе — не смог найти недорогой видеорегистратор, который позволил бы потом написать на нем собственное ПО для отправки файлов в облачное хранилище и взаимодействия с Telegram (об этом чуть позже). Кроме того у меня было много других задач для одноплатного компьютера – мониторинг погоды, Telegram bot и т.д. В общем, это было универсальное решение для многих задач. Подойдет и RaspberryPi. Получается, по деньгам на аппаратное обеспечение уложился в 10 тыс. рублей.

Программное обеспечение

Операционная система — Ubuntu для Odroid.

Я не программист и никогда им не был и уже не стану, но с Python я смог разобраться за несколько месяцев редких вечерних экспериментов. Смог написать простейшего Telegram бота на библиотеке telebot [1]. Поэтому для сложных скриптов использую Python. Рад, что изучил его, т.к. много других своих задач решил с помощью этого языка. Python нужен мне для отправки записанных файлов в Яндекс Диск.

«Гуглением» можно научиться собирать bash-скрипты из других решений и я использую их в упрощенных вариантах.

Ну и самое главное – программа Motion.

Motion

Я расскажу ниже о недостатках и проблемах этого решения, но все же оно бесплатное и простое. Motion позволяет решить задачу детектирования движения и записи видео в формате mjpeg, когда что-то происходит в подъезде.

Моя публикация – не инструкция по Motion. Я описываю только существенные моменты, хотя полный конфигурационных файл приведет внизу.

Кстати камера может сама детектировать движение. В этом случае она загружает набор картинок на FTP сервер. Я также использую этот режим на случай, если motion по какой-либо причине пропустит движение и не запишет видео, по сути дублирование.

Для тех, кто не знаком с Motion, сообщу, что это программа, цель которой — записывать видео в случаях, если она (программа) определяет, что картинка с камеры изменилась (перед камерой что-то двигается). Для этого она постоянно сравнивает картинки и определяет, что новая картинка не равна предыдущей в каком-то проценте (процент несовпадения задается в файле конфигурации). Запись останавливается после того, как картинка перестала меняться в течение заданного промежутка времени (также задается в конфигурации).

В подъезде Управляющая Компания поставила лампу с датчиками движения. Лампа постоянно включаются/выключаются даже без движения. Motion в этом случае начинает записывать видео, поэтому я использую его настройку LIGHTSWITCH = 1. В этом случае Motion пропускает 5 кадров на перестройку чувствительности камеры. К сожалению, это не всегда работает, но уверен это мой частный случай. Иногда я планирую отключить датчики движения на лампах в подъезде, но пусть все же экономится общая электроэнергия.

Важнейший параметр – количество кадров в секунду, которые принимает на анализ и записывает Motion (параметр FRAMERATE) Скажем, если параметр равен 5, как в примере, Motion «берет» 5 кадров в секунду – видео получается прерывистым, но вполне достаточным, чтобы понять, что происходит. Увеличение этого параметра сглаживает записываемое видео, снижает время реакции на движения, но увеличивает нагрузку на процессор. 5 кадров в секунду, мне показалось, наиболее оптимальным.

Motion сам записывает видео, но если хочется сделать запись со своими параметрами (например, с другим FRAMERATE) можно сконфигурировать простейшую запись:

on_event_start = vlc rtsp://admin:vova@192.168.0.100:554/Streaming/Channels/101 --sout=file/ps:/home/vova/Files/Camera/$(date +%m%d%H%M%S).mp4
on_event_end = pkill -f vlc

Используемая архитектура позволяет использовать Motion версии 3.2.12+git20140228, специально собранной под нее. Версия старая, не обновляется, но исправно работает. Ее основная проблема в том, что при работе с WiFI (а Odroid у меня подключен по WiFi к локальной сети) иногда Motion теряет связь с камерой и эта связь не восстанавливается сама. Приходится перезапускать Motion. Потеря связи проявляется в том, что Motion “зависает” на одной картинке. Для того, что перезапустить Motion, я написал специальный скрипт: он пишет несколько картинок с Web сервера Motion (Motion дает возможность посмотреть видео со встроенного Web сервера), сравнивает их между собой по размеру и если размер одинаковый, значит Motion «завис» на одной картинке. Почему по размеру? Я мог бы сравнить их по содержимому с помощью пакета Python Pillow, но это лишняя нагрузка на процессор – Pillow очень требователен к ресурсам, надо сравнивать все пиксели между собой.

Второй вариант решения – подключить odroid через Ethernet. В этом случае проблем нет.

Захотелось, чтобы в случае, если перед моей дверью есть движение, фотография приходила в Telegram-бот. Для этого в параметре задал исполнение простейшего bash скрипта. Но сначала надо задать область детектирования: area_detect = 89. Это означает, что Motion детектирует движение в квадратах 8 и 9.

1 2 3
4 5 6
7 8 9

Далее создаем скрипт для отправки фотографий в Telegram

send_pix

#!/bin/sh
# Token for Telegram
TOKEN=1234567890abcdg 
# Get snapshot from Camera
wget --user admin --password vova -O  /home/vova/Files/output.jpg  http://192.168.0.100/Streaming/channels/1/picture

#Send snapshot to Telegram
curl -s "https://api.telegram.org/bot${TOKEN}/sendPhoto" -F chat_id=12345678 -F photo="@/home/vova/Files/output.jpg" -F caption=$1

Чтобы он сработал при детектировании в конфигурационном файле прописываем параметр

on_area_detected = /home/vova/Core/scrypts/send_pix

Получается, в Telegram вот так выглядит

Видеонаблюдение в подъезде своими силами - 2

Вот мой весь конфигурационный файл

motion.cfg

# /home/vova/Core/scrypts/motion/motion.conf
#
# This config file was generated by motion 3.2.12+git20140228


############################################################
# Daemon
############################################################

# Start in daemon (background) mode and release terminal (default: off)
daemon on

#File to store the process ID, also called pid file. (default: not defined)
process_id_file /home/vova/Core/scrypts/pid/motion.pid

############################################################
# Basic Setup Mode
############################################################

# Start in Setup-Mode, daemon disabled. (default: off)
setup_mode off

# Use a file to save logs messages, if not defined stderr and syslog is used. (default: not defined)
logfile /home/vova/Files/Logs/motion/motion.log

# Level of log messages [1..9] (EMR, ALR, CRT, ERR, WRN, NTC, ERR, DBG, ALL). (default: 6 / NTC)
log_level 6

# Filter to log messages by type (COR, STR, ENC, NET, DBL, EVT, TRK, VID, ALL). (default: ALL)
log_type all


###########################################################
# Capture device options
############################################################

# Videodevice to be used for capturing  (default /dev/video0)
# for FreeBSD default is /dev/bktr0
videodevice /dev/video0

# v4l2_palette allows to choose preferable palette to be use by motion
# to capture from those supported by your videodevice. (default: 17)
# E.g. if your videodevice supports both V4L2_PIX_FMT_SBGGR8 and
# V4L2_PIX_FMT_MJPEG then motion will by default use V4L2_PIX_FMT_MJPEG.
# Setting v4l2_palette to 2 forces motion to use V4L2_PIX_FMT_SBGGR8
# instead.
#
# Values :
# V4L2_PIX_FMT_SN9C10X : 0  'S910'
# V4L2_PIX_FMT_SBGGR16 : 1  'BYR2'
# V4L2_PIX_FMT_SBGGR8  : 2  'BA81'
# V4L2_PIX_FMT_SPCA561 : 3  'S561'
# V4L2_PIX_FMT_SGBRG8  : 4  'GBRG'
# V4L2_PIX_FMT_SGRBG8  : 5  'GRBG'
# V4L2_PIX_FMT_PAC207  : 6  'P207'
# V4L2_PIX_FMT_PJPG    : 7  'PJPG'
# V4L2_PIX_FMT_MJPEG   : 8  'MJPEG'
# V4L2_PIX_FMT_JPEG    : 9  'JPEG'
# V4L2_PIX_FMT_RGB24   : 10 'RGB3'
# V4L2_PIX_FMT_SPCA501 : 11 'S501'
# V4L2_PIX_FMT_SPCA505 : 12 'S505'
# V4L2_PIX_FMT_SPCA508 : 13 'S508'
# V4L2_PIX_FMT_UYVY    : 14 'UYVY'
# V4L2_PIX_FMT_YUYV    : 15 'YUYV'
# V4L2_PIX_FMT_YUV422P : 16 '422P'
# V4L2_PIX_FMT_YUV420  : 17 'YU12'
#
v4l2_palette 17

# The video input to be used (default: -1)
# Should normally be set to 0 or 1 for video/TV cards, and -1 for USB cameras
input -1

# The video norm to use (only for video capture and TV tuner cards)
# Values: 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour). Default: 0 (PAL)
norm 0

# The frequency to set the tuner to (kHz) (only for TV tuner cards) (default: 0)
frequency 0

# Rotate image this number of degrees. The rotation affects all saved images as
# well as movies. Valid values: 0 (default = no rotation), 90, 180 and 270.
rotate 0

# Image width (pixels). Valid range: Camera dependent, default: 352
width 1280

# Image height (pixels). Valid range: Camera dependent, default: 288
height 960

# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 5

# Minimum time in seconds between capturing picture frames from the camera.
# Default: 0 = disabled - the capture rate is given by the camera framerate.
# This option is used when you want to capture images at a rate lower than 2 per second.
minimum_frame_time 0

# URL to use if you are using a network camera, size will be autodetected (incl http:// ftp:// mjpg:// or file:///)
# Must be a URL that returns single jpeg pictures or a raw mjpeg stream. Default: Not defined
netcam_url rtsp://192.168.0.100:554

# Username and password for network camera (only if required). Default: not defined
# Syntax is user:password
netcam_userpass admin:vova

# The setting for keep-alive of network socket, should improve performance on compatible net cameras.
# off:   The historical implementation using HTTP/1.0, closing the socket after each http request.
# force: Use HTTP/1.0 requests with keep alive header to reuse the same connection.
# on:    Use HTTP/1.1 requests that support keep alive as default.
# Default: off
netcam_keepalive force

# URL to use for a netcam proxy server, if required, e.g. "http://myproxy".
# If a port number other than 80 is needed, use "http://myproxy:1234".
# Default: not defined
; netcam_proxy value

# Set less strict jpeg checks for network cameras with a poor/buggy firmware.
# Default: off
netcam_tolerant_check on

# Let motion regulate the brightness of a video device (default: off).
# The auto_brightness feature uses the brightness option as its target value.
# If brightness is zero auto_brightness will adjust to average brightness value 128.
# Only recommended for cameras without auto brightness
auto_brightness off

# Set the initial brightness of a video device.
# If auto_brightness is enabled, this value defines the average brightness level
# which Motion will try and adjust to.
# Valid range 0-255, default 0 = disabled
brightness 0

# Set the contrast of a video device.
# Valid range 0-255, default 0 = disabled
contrast 0

# Set the saturation of a video device.
# Valid range 0-255, default 0 = disabled
saturation 0

# Set the hue of a video device (NTSC feature).
# Valid range 0-255, default 0 = disabled
hue 0


############################################################
# Round Robin (multiple inputs on same video device name)
############################################################

# Number of frames to capture in each roundrobin step (default: 1)
roundrobin_frames 1

# Number of frames to skip before each roundrobin step (default: 1)
roundrobin_skip 1

# Try to filter out noise generated by roundrobin (default: off)
switchfilter off


############################################################
# Motion Detection Settings:
############################################################

# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
threshold 400

# Automatically tune the threshold down if possible (default: off)
threshold_tune off

# Noise threshold for the motion detection (default: 32)
noise_level 32

# Automatically tune the noise threshold (default: on)
noise_tune on

# Despeckle motion image using (e)rode or (d)ilate or (l)abel (Default: not defined)
# Recommended value is EedDl. Any combination (and number of) of E, e, d, and D is valid.
# (l)abeling must only be used once and the 'l' must be the last letter.
# Comment out to disable
despeckle_filter EedDl

# Detect motion in predefined areas (1 - 9). Areas are numbered like that:  1 2 3
# A script (on_area_detected) is started immediately when motion is         4 5 6
# detected in one of the given areas, but only once during an event.        7 8 9
# One or more areas can be specified with this option. Take care: This option
# does NOT restrict detection to these areas! (Default: not defined)
area_detect 589

# PGM file to use as a sensitivity mask.
# Full path name to. (Default: not defined)
; mask_file value

# Dynamically create a mask file during operation (default: 0)
# Adjust speed of mask changes from 0 (off) to 10 (fast)
smart_mask_speed 0

# Ignore sudden massive light intensity changes given as a percentage of the picture
# area that changed intensity. If set to 1, motion will do some kind of
# auto-lightswitch. Valid range: 0 - 100 , default: 0 = disabled
lightswitch 1

# Picture frames must contain motion at least the specified number of frames
# in a row before they are detected as true motion. At the default of 1, all
# motion is detected. Valid range: 1 to thousands, recommended 1-5
minimum_motion_frames 6

# Specifies the number of pre-captured (buffered) pictures from before motion
# was detected that will be output at motion detection.
# Recommended range: 0 to 5 (default: 0)
# Do not use large values! Large values will cause Motion to skip video frames and
# cause unsmooth movies. To smooth movies use larger values of post_capture instead.
pre_capture 2

# Number of frames to capture after motion is no longer detected (default: 0)
post_capture 0

# Event Gap is the seconds of no motion detection that triggers the end of an event.
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value -1 is allowed and disables
# events causing all Motion to be written to one single movie file and no pre_capture.
# If set to 0, motion is running in gapless mode. Movies don't have gaps anymore. An
# event ends right after no more motion is detected and post_capture is over.
event_gap 20

# Maximum length in seconds of a movie
# When value is exceeded a new movie file is created. (Default: 0 = infinite)
max_movie_time 0

# Always save images even if there was no motion (default: off)
emulate_motion off


############################################################
# Image File Output
############################################################

# Output 'normal' pictures when motion is detected (default: on)
# Valid values: on, off, first, best, center
# When set to 'first', only the first picture of an event is saved.
# Picture with most motion of an event is saved when set to 'best'.
# Picture with motion nearest center of picture is saved when set to 'center'.
# Can be used as preview shot for the corresponding movie.
output_pictures off

# Output pictures with only the pixels moving object (ghost images) (default: off)
output_debug_pictures off

# The quality (in percent) to be used by the jpeg compression (default: 75)
quality 100

# Type of output images
# Valid values: jpeg, ppm (default: jpeg)
picture_type jpeg


############################################################
# FFMPEG related options
# Film (movie) file output, and deinterlacing of the video input
# The options movie_filename and timelapse_filename are also used
# by the ffmpeg feature
############################################################

# Use ffmpeg to encode movies in realtime (default: off)
ffmpeg_output_movies on

# Use ffmpeg to make movies with only the pixels moving
# object (ghost images) (default: off)
ffmpeg_output_debug_movies off

# Use ffmpeg to encode a timelapse movie
# Default value 0 = off - else save frame every Nth second
ffmpeg_timelapse 0

# The file rollover mode of the timelapse video
# Valid values: hourly, daily (default), weekly-sunday, weekly-monday, monthly, manual
ffmpeg_timelapse_mode daily

# Bitrate to be used by the ffmpeg encoder (default: 400000)
# This option is ignored if ffmpeg_variable_bitrate is not 0 (disabled)
ffmpeg_bps 8100000

# Enables and defines variable bitrate for the ffmpeg encoder.
# ffmpeg_bps is ignored if variable bitrate is enabled.
# Valid values: 0 (default) = fixed bitrate defined by ffmpeg_bps,
# or the range 2 - 31 where 2 means best quality and 31 is worst.
ffmpeg_variable_bitrate 0

# Codec to used by ffmpeg for the video compression.
# Timelapse movies are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 - gives you files with extension .mpg
# mpeg4 or msmpeg4 - gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf - gives you a flash film with extension .swf
# flv - gives you a flash video with extension .flv
# ffv1 - FF video codec 1 for Lossless Encoding ( experimental )
# mov - QuickTime ( testing )
# ogg - Ogg/Theora ( testing )
ffmpeg_video_codec mpeg4

# Use ffmpeg to deinterlace video. Necessary if you use an analog camera
# and see horizontal combing on moving objects in video or pictures.
# (default: off)
ffmpeg_deinterlace off


############################################################
# SDL Window
############################################################

# Number of motion thread to show in SDL Window (default: 0 = disabled)
sdl_threadnr 0


############################################################
# External pipe to video encoder
# Replacement for FFMPEG builtin encoder for ffmpeg_output_movies only.
# The options movie_filename and timelapse_filename are also used
# by the ffmpeg feature
############################################################

# Bool to enable or disable extpipe (default: off)
use_extpipe off

# External program (full path and opts) to pipe raw video to
# Generally, use '-' for STDIN...
; extpipe value


############################################################
# Snapshots (Traditional Periodic Webcam File Output)
############################################################

# Make automated snapshot every N seconds (default: 0 = disabled)
snapshot_interval 0


############################################################
# Text Display
# %Y = year, %m = month, %d = date,
# %H = hour, %M = minute, %S = second, %T = HH:MM:SS,
# %v = event, %q = frame number, %t = thread (camera) number,
# %D = changed pixels, %N = noise level, n = new line,
# %i and %J = width and height of motion area,
# %K and %L = X and Y coordinates of motion center
# %C = value defined by text_event - do not use with text_event!
# You can put quotation marks around the text to allow
# leading spaces
############################################################

# Locate and draw a box around the moving object.
# Valid values: on, off, preview (default: off)
# Set to 'preview' will only draw a box in preview_shot pictures.
locate_motion_mode off

# Set the look and style of the locate box if enabled.
# Valid values: box, redbox, cross, redcross (default: box)
# Set to 'box' will draw the traditional box.
# Set to 'redbox' will draw a red box.
# Set to 'cross' will draw a little cross to mark center.
# Set to 'redcross' will draw a little red cross to mark center.
locate_motion_style box

# Draws the timestamp using same options as C function strftime(3)
# Default: %Y-%m-%dn%T = date in ISO format and time in 24 hour clock
# Text is placed in lower right corner
text_right -

# Draw a user defined text on the images using same options as C function strftime(3)
# Default: Not defined = no text
# Text is placed in lower left corner
; text_left value

# Draw the number of changed pixed on the images (default: off)
# Will normally be set to off except when you setup and adjust the motion settings
# Text is placed in upper right corner
text_changes off

# This option defines the value of the special event conversion specifier %C
# You can use any conversion specifier in this option except %C. Date and time
# values are from the timestamp of the first image in the current event.
# Default: %Y%m%d%H%M%S
# The idea is that %C can be used filenames and text_left/right for creating
# a unique identifier for each event.
text_event -

# Draw characters at twice normal size on images. (default: off)
text_double off

# Text to include in a JPEG EXIF comment
# May be any text, including conversion specifiers.
# The EXIF timestamp is included independent of this text.
; exif_text value


############################################################
# Target Directories and filenames For Images And Films
# For the options snapshot_, picture_, movie_ and timelapse_filename
# you can use conversion specifiers
# %Y = year, %m = month, %d = date,
# %H = hour, %M = minute, %S = second,
# %v = event, %q = frame number, %t = thread (camera) number,
# %D = changed pixels, %N = noise level,
# %i and %J = width and height of motion area,
# %K and %L = X and Y coordinates of motion center
# %C = value defined by text_event
# Quotation marks round string are allowed.
############################################################

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /home/vova/Files/Camera/

# File path for snapshots (jpeg or ppm) relative to target_dir
# Default: %v-%Y%m%d%H%M%S-snapshot
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-snapshot
# File extension .jpg or .ppm is automatically added so do not include this.
# Note: A symbolic link called lastsnap.jpg created in the target_dir will always
# point to the latest snapshot, unless snapshot_filename is exactly 'lastsnap'
snapshot_filename %Y%m%d%H%M%S-snapshot

# File path for motion triggered images (jpeg or ppm) relative to target_dir
# Default: %v-%Y%m%d%H%M%S-%q
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q
# File extension .jpg or .ppm is automatically added so do not include this
# Set to 'preview' together with best-preview feature enables special naming
# convention for preview shots. See motion guide for details
picture_filename %Y%m%d%H%M%S-%q

# File path for motion triggered ffmpeg films (movies) relative to target_dir
# Default: %v-%Y%m%d%H%M%S
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H%M%S
# File extension .mpg or .avi is automatically added so do not include this
# This option was previously called ffmpeg_filename
movie_filename %m%d_%H-%M-%S

# File path for timelapse movies relative to target_dir
# Default: %Y%m%d-timelapse
# Default value is near equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d-timelapse
# File extension .mpg is automatically added so do not include this
timelapse_filename %Y%m%d-timelapse


############################################################
# Global Network Options
############################################################

# Enable or disable IPV6 for http control and stream (default: off)
ipv6_enabled off


############################################################
# Live Stream Server
############################################################

# The mini-http server listens to this port for requests (default: 0 = disabled)
stream_port 8082

# Quality of the jpeg (in percent) images produced (default: 50)
stream_quality 50

# Output frames at 1 fps when no motion is detected and increase to the
# rate given by stream_maxrate when motion is detected (default: off)
stream_motion off

# Maximum framerate for streams (default: 1)
stream_maxrate 1

# Restrict stream connections to localhost only (default: on)
stream_localhost off

# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual stream rate by desired number of seconds
# Actual stream rate is the smallest of the numbers framerate and stream_maxrate
stream_limit 0

# Set the authentication method (default: 0)
# 0 = disabled 
# 1 = Basic authentication
# 2 = MD5 digest (the safer authentication)

stream_auth_method 0

# Authentication for the stream. Syntax username:password
# Default: not defined (Disabled)
; stream_authentication value


############################################################
# HTTP Based Control
############################################################

# TCP/IP port for the http server to listen on (default: 0 = disabled)
webcontrol_port 8081

# Restrict control connections to localhost only (default: on)
webcontrol_localhost off

# Output for http server, select off to choose raw text plain (default: on)
webcontrol_html_output on

# Authentication for the http based control. Syntax username:password
# Default: not defined (Disabled)
; webcontrol_authentication value


############################################################
# Tracking (Pan/Tilt)
############################################################

# Type of tracker (0=none (default), 1=stepper, 2=iomojo, 3=pwc, 4=generic, 5=uvcvideo, 6=servo)
# The generic type enables the definition of motion center and motion size to
# be used with the conversion specifiers for options like on_motion_detected
track_type 0

# Enable auto tracking (default: off)
track_auto off

# Serial port of motor (default: none)
; track_port value

# Motor number for x-axis (default: 0)
track_motorx 0

# Set motorx reverse (default: off)
track_motorx_reverse off

# Motor number for y-axis (default: 0)
track_motory 0

# Set motory reverse (default: off)
track_motory_reverse off

# Maximum value on x-axis (default: 0)
track_maxx 0

# Minimum value on x-axis (default: 0)
track_minx 0

# Maximum value on y-axis (default: 0)
track_maxy 0

# Minimum value on y-axis (default: 0)
track_miny 0

# Center value on x-axis (default: 0)
track_homex 128

# Center value on y-axis (default: 0)
track_homey 128

# ID of an iomojo camera if used (default: 0)
track_iomojo_id 0

# Angle in degrees the camera moves per step on the X-axis
# with auto-track (default: 10)
# Currently only used with pwc type cameras
track_step_angle_x 10

# Angle in degrees the camera moves per step on the Y-axis
# with auto-track (default: 10)
# Currently only used with pwc type cameras
track_step_angle_y 10

# Delay to wait for after tracking movement as number
# of picture frames (default: 10)
track_move_wait 10

# Speed to set the motor to (stepper motor option) (default: 255)
track_speed 255

# Number of steps to make (stepper motor option) (default: 40)
track_stepsize 40


############################################################
# External Commands, Warnings and Logging:
# You can use conversion specifiers for the on_xxxx commands
# %Y = year, %m = month, %d = date,
# %H = hour, %M = minute, %S = second,
# %v = event, %q = frame number, %t = thread (camera) number,
# %D = changed pixels, %N = noise level,
# %i and %J = width and height of motion area,
# %K and %L = X and Y coordinates of motion center
# %C = value defined by text_event
# %f = filename with full path
# %n = number indicating filetype
# Both %f and %n are only defined for on_picture_save,
# on_movie_start and on_movie_end
# Quotation marks round string are allowed.
############################################################

# Do not sound beeps when detecting motion (default: on)
# Note: Motion never beeps when running in daemon mode.
quiet on

# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by event_gap 
; on_event_start value

# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option event_gap.
on_event_end pkill -f vlc

# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
; on_picture_save value

# Command to be executed when a motion frame is detected (default: none)
; on_motion_detected value

# Command to be executed when motion in a predefined area is detected
# Check option 'area_detect'. (default: none)
on_area_detected /home/vova/Core/scrypts/send_pix > /home/vova/Files/Logs/motion/motion_area.log 2>&1

# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
on_movie_start echo "1" > /home/vova/Core/scrypts/motion/motion_label

# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
on_movie_end echo "0" > /home/vova/Core/scrypts/motion/motion_label

# Command to be executed when a camera can't be opened or if it is lost
# NOTE: There is situations when motion don't detect a lost camera!
# It depends on the driver, some drivers dosn't detect a lost camera at all
# Some hangs the motion thread. Some even hangs the PC! (default: none)
on_camera_lost wget http://192.168.0.205:8000/message/camera_lost


############################################################
# Common Options for database features.
# Options require the database options to be active also.
############################################################

# Log to the database when creating motion triggered image file  (default: on)
sql_log_picture on

# Log to the database when creating a snapshot image file (default: on)
sql_log_snapshot on

# Log to the database when creating motion triggered movie file (default: off)
sql_log_movie off

# Log to the database when creating timelapse movie file (default: off)
sql_log_timelapse off

# SQL query string that is sent to the database
# Use same conversion specifiers has for text features
# Additional special conversion specifiers are
# %n = the number representing the file_type
# %f = filename with full path
# Create tables :
##
# Mysql
# CREATE TABLE security (camera int, filename char(80) not null, frame int, file_type int, time_stamp timestamp(14), event_time_stamp timestamp(14));
#
# Postgresql
# CREATE TABLE security (camera int, filename char(80) not null, frame int, file_type int, time_stamp timestamp without time zone, event_time_stamp timestamp without time zone);
#
# Default value:
# insert into security(camera, filename, frame, file_type, time_stamp, text_event) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
sql_query sql_query insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')

############################################################
# Database Options 
############################################################

# database type : mysql, postgresql, sqlite3 (default : not defined)
; database_type value

# database to log to (default: not defined)
; database_dbname value

# The host on which the database is located (default: not defined)
database_host localhost

# User account name for database (default: not defined)
; database_user value

# User password for database (default: not defined)
; database_password value

# Port on which the database is located (default: not defined)
# mysql 3306 , postgresql 5432 (default: not defined)
database_port 0

############################################################
# Database Options For SQLite3
############################################################

# SQLite3 database to log to (default: not defined)
; sqlite3_db value

############################################################
# Video Loopback Device (vloopback project)
############################################################

# Output images to a video4linux loopback device
# The value '-' means next available (default: not defined)
; video_pipe value

# Output motion images to a video4linux loopback device
# The value '-' means next available (default: not defined)
; motion_video_pipe value

##############################################################
# Thread config files - One for each camera.
# Except if only one camera - You only need this config file.
# If you have more than one camera you MUST define one thread
# config file for each camera in addition to this config file.
##############################################################

; thread /etc/motion/thread1.conf

Motion можно настраивать и через web интерфейс. По умолчанию порт 8081

Удаленный доступ к записанному видео

Для удаленного доступа записанные фрагменты видео передаются в Яндекс Диск. Я сам написал на Python «легкую» программу для доступа к ЯДиску.

В cron создал расписание, которое каждые 10 минут запускает ее. Файлы распределяются по папкам в соответствии со временем записи, чтобы легче было их искать.

Хотел привести здесь код программы, тогда это уже будет тема про API Яндекс Диска на Python. Я сделаю это отдельной статьей.

Заключение

В итоге мы получили видеонаблюдение с минимальным вложением финансовых средств. Без «трудоемкого программирования», но с возможностью подстроить под себя. Файлы сохраняются в облачном хранилище и не потеряются. В случае, если есть активность около Вашей двери, придет фотография в Telegram.

Из задачи на будущее: при движении около двери картинка с камеры появляется на медиацентре Kodi, если в это время я смотрю что-либо на нем (иначе он сам включает телевизор и он работает пока вручную не выключить). Вроде видеодомофона.

На заглавной картинке сосед-квартиросъёмщик «отдыхает». Распечатал это фото и положил ему в почтовый ящик. Стал менее эксцентричным в общественных местах. Знает, что все записывается.

Вторая фотография — попытка открывания моей двери. Но возможно, просто ошиблись.
Очень много записей, когда приходят странные люди, смотрят на камеру, закрывают лицо и уходят. Я даже после этого накупил муляжей и развесил по подъезду.

Автор: Владимир

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/269653

Ссылки в тексте:

[1] telebot: https://github.com/eternnoir/pyTelegramBotAPI

[2] Источник: https://habrahabr.ru/post/343672/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox