├── LICENSE ├── .gitignore ├── hello_flask ├── requirements.txt ├── run.sh ├── app.py ├── build.json ├── config.json └── Dockerfile ├── streamlit_basic ├── requirements.txt ├── Dockerfile ├── build.json └── config.json ├── assets ├── motion.jpg └── streamlit.jpg ├── tesseract ├── requirements.txt ├── build.json ├── config.json ├── Dockerfile └── app.py ├── repository.json ├── motion ├── Dockerfile ├── config.json ├── run.sh ├── README.md └── motion.conf └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv* -------------------------------------------------------------------------------- /hello_flask/requirements.txt: -------------------------------------------------------------------------------- 1 | flask==2.3.2 -------------------------------------------------------------------------------- /streamlit_basic/requirements.txt: -------------------------------------------------------------------------------- 1 | streamlit==0.60.0 -------------------------------------------------------------------------------- /assets/motion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robmarkcole/hassio-addons/HEAD/assets/motion.jpg -------------------------------------------------------------------------------- /assets/streamlit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robmarkcole/hassio-addons/HEAD/assets/streamlit.jpg -------------------------------------------------------------------------------- /tesseract/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.3.2 2 | numpy==1.22.0 3 | pillow>=6.2.0 4 | pytesseract==0.2.6 5 | -------------------------------------------------------------------------------- /hello_flask/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | 3 | echo Running flask hello world 4 | python3 app.py 5 | 6 | -------------------------------------------------------------------------------- /repository.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Hass.IO add-on repository", 3 | "url": "https://github.com/robmarkcole/hassio-addons", 4 | "maintainer": "robmarkcole" 5 | } 6 | -------------------------------------------------------------------------------- /hello_flask/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | 3 | app = Flask(__name__) 4 | 5 | 6 | @app.route("/") 7 | def hello_world(): 8 | return "Hey, we have Flask in a Docker container!" 9 | 10 | 11 | if __name__ == "__main__": 12 | app.run(debug=True, host="0.0.0.0") 13 | -------------------------------------------------------------------------------- /motion/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM debian:buster 3 | 4 | RUN apt-get update && apt-get install -q -y --no-install-recommends \ 5 | motion \ 6 | jq 7 | 8 | # Copy data 9 | COPY run.sh / 10 | COPY motion.conf /etc/ 11 | 12 | RUN chmod a+x /run.sh 13 | 14 | CMD [ "/run.sh" ] 15 | -------------------------------------------------------------------------------- /streamlit_basic/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8 2 | LABEL maintainer="Robin Cole @robmarkcole" 3 | 4 | EXPOSE 8501 5 | 6 | RUN mkdir -p /home/streamlit 7 | WORKDIR /home/streamlit 8 | 9 | COPY requirements.txt . 10 | RUN pip install --upgrade pip 11 | RUN pip install -r requirements.txt 12 | 13 | COPY . /home/streamlit 14 | 15 | CMD ["streamlit","hello"] -------------------------------------------------------------------------------- /tesseract/build.json: -------------------------------------------------------------------------------- 1 | { 2 | "args": {}, 3 | "build_from": { 4 | "aarch64": "hassioaddons/base-python-aarch64:5.2.0", 5 | "amd64": "hassioaddons/base-python-amd64:5.2.0", 6 | "armhf": "hassioaddons/base-python-armhf:5.2.0", 7 | "armv7": "hassioaddons/base-python-armv7:5.2.0", 8 | "i386": "hassioaddons/base-python-i386:5.2.0" 9 | } 10 | } -------------------------------------------------------------------------------- /hello_flask/build.json: -------------------------------------------------------------------------------- 1 | { 2 | "args": {}, 3 | "build_from": { 4 | "aarch64": "hassioaddons/base-python-aarch64:5.2.0", 5 | "amd64": "hassioaddons/base-python-amd64:5.2.0", 6 | "armhf": "hassioaddons/base-python-armhf:5.2.0", 7 | "armv7": "hassioaddons/base-python-armv7:5.2.0", 8 | "i386": "hassioaddons/base-python-i386:5.2.0" 9 | } 10 | } -------------------------------------------------------------------------------- /streamlit_basic/build.json: -------------------------------------------------------------------------------- 1 | { 2 | "args": {}, 3 | "build_from": { 4 | "aarch64": "hassioaddons/base-python-aarch64:5.2.0", 5 | "amd64": "hassioaddons/base-python-amd64:5.2.0", 6 | "armhf": "hassioaddons/base-python-armhf:5.2.0", 7 | "armv7": "hassioaddons/base-python-armv7:5.2.0", 8 | "i386": "hassioaddons/base-python-i386:5.2.0" 9 | } 10 | } -------------------------------------------------------------------------------- /tesseract/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tesseract", 3 | "version": "0.3", 4 | "slug": "tesseract", 5 | "description": "Tesseract", 6 | "arch": [ 7 | "armhf", 8 | "armv7", 9 | "aarch64", 10 | "amd64", 11 | "i386" 12 | ], 13 | "startup": "before", 14 | "boot": "auto", 15 | "options": {}, 16 | "schema": {}, 17 | "ports": { 18 | "5000/tcp": 5000 19 | } 20 | } -------------------------------------------------------------------------------- /hello_flask/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Hello flask", 3 | "version": "0.23", 4 | "slug": "hello_flask", 5 | "description": "Hello world flask add-on!", 6 | "arch": [ 7 | "armhf", 8 | "armv7", 9 | "aarch64", 10 | "amd64", 11 | "i386" 12 | ], 13 | "startup": "before", 14 | "boot": "auto", 15 | "options": {}, 16 | "schema": {}, 17 | "ports": { 18 | "5000/tcp": 5000 19 | } 20 | } -------------------------------------------------------------------------------- /streamlit_basic/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Hello streamlit", 3 | "version": "0.2", 4 | "slug": "hello_streamlit", 5 | "description": "Hello streamlit", 6 | "arch": [ 7 | "armhf", 8 | "armv7", 9 | "aarch64", 10 | "amd64", 11 | "i386" 12 | ], 13 | "startup": "before", 14 | "boot": "auto", 15 | "options": {}, 16 | "schema": {}, 17 | "ports": { 18 | "8501/tcp": 8501 19 | } 20 | } -------------------------------------------------------------------------------- /tesseract/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | RUN apt-get update \ 3 | && apt-get install tesseract-ocr -y \ 4 | python3 \ 5 | #python-setuptools \ 6 | python3-pip \ 7 | && apt-get clean \ 8 | && apt-get autoremove 9 | 10 | 11 | ADD . /home/App 12 | WORKDIR /home/App 13 | COPY requirements.txt ./ 14 | COPY . . 15 | 16 | RUN pip install -r requirements.txt 17 | 18 | VOLUME ["/data"] 19 | EXPOSE 5000 5000 20 | CMD ["python" ,"app.py"] -------------------------------------------------------------------------------- /tesseract/app.py: -------------------------------------------------------------------------------- 1 | import io 2 | import flask 3 | from PIL import Image 4 | import pytesseract 5 | 6 | app = flask.Flask(__name__) 7 | 8 | 9 | @app.route("/") 10 | def info(): 11 | return """Flask app exposing tesseract OCR""" 12 | 13 | 14 | @app.route("/process", methods=["POST"]) 15 | def process_file(): 16 | data = {"success": "false"} 17 | if not flask.request.method == "POST": 18 | return 19 | 20 | if flask.request.files.get("image"): 21 | image_file = flask.request.files["image"] 22 | image_bytes = image_file.read() 23 | pil_image = Image.open(io.BytesIO(image_bytes)) 24 | text = pytesseract.image_to_string(pil_image) 25 | data["text"] = text 26 | data["success"] = "true" 27 | return flask.jsonify(data) 28 | 29 | 30 | if __name__ == "__main__": 31 | app.run(host="0.0.0.0", port=5000, debug=True) 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hass.io Addons repository 2 | 3 | ## Hello flask 4 | Hello world flask addon that simply returns a string. Navigate to [http://homeassistant.local:5000/](http://homeassistant.local:5000/) 5 | 6 | ## Motion 7 | [A usb camera motion detector addon.](./motion) This fork allows viewing the live stream and by default does not save any images to disk. Note that if you are on a public network be careful as authentification of the stream and webcontrol are not enabled. 8 | 9 |

10 | 11 |

12 | 13 | ## Streamlit 14 | Run the [streamlit demo](https://docs.streamlit.io/en/latest/getting_started.html). The build takes a long time, but succeeds in the end :-) 15 | 16 |

17 | 18 |

19 | 20 | ## Tesseract - WIP 21 | Build failing, unsure why: `Can't build local/aarch64-addon-tesseract:0.3: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 127` 22 | 23 | # Development 24 | * Setup samba server and use local vscode 25 | * debug the docker image locally on my dev machine, first build `docker build -t $yourimage .` then run `docker run -it --entrypoint=/bin/bash $yourimage` -------------------------------------------------------------------------------- /hello_flask/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM=hassioaddons/base-python:5.2.0 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Set shell 6 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] 7 | 8 | # Copy Python requirements file 9 | COPY requirements.txt /tmp/ 10 | COPY app.py / 11 | 12 | # Setup base 13 | ARG BUILD_ARCH=amd64 14 | RUN \ 15 | apk add --no-cache --virtual .build-dependencies \ 16 | g++=9.2.0-r4 \ 17 | gcc=9.2.0-r4 \ 18 | make=4.2.1-r2 \ 19 | \ 20 | && apk add --no-cache \ 21 | nginx-mod-http-lua=1.16.1-r6 \ 22 | lua-resty-http=0.15-r0 \ 23 | nginx=1.16.1-r6 \ 24 | cython=0.29.14-r0 \ 25 | \ 26 | && pip3 install \ 27 | --no-cache-dir \ 28 | --prefer-binary \ 29 | --find-links "https://wheels.hass.io/alpine-3.11/${BUILD_ARCH}/" \ 30 | -r /tmp/requirements.txt \ 31 | \ 32 | && find /usr/local \ 33 | \( -type d -a -name test -o -name tests -o -name '__pycache__' \) \ 34 | -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ 35 | -exec rm -rf '{}' + \ 36 | \ 37 | && apk del --purge .build-dependencies \ 38 | && rm -f -r \ 39 | /etc/nginx \ 40 | /tmp/* 41 | 42 | # Copy data for add-on 43 | COPY run.sh / 44 | COPY requirements.txt /tmp/ 45 | # Install requirements for add-on 46 | RUN pip install -r /tmp/requirements.txt 47 | 48 | RUN chmod a+x /run.sh 49 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /motion/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Motion_mjpeg", 3 | "version": "3.0", 4 | "slug": "motion_mjpeg", 5 | "description": "A software motion detector that integrates a usb webcam into hass.io", 6 | "startup": "system", 7 | "boot": "auto", 8 | "ports": { 9 | "8080/tcp": 8080, 10 | "8081/tcp": 8081 11 | }, 12 | "arch": [ 13 | "aarch64", 14 | "amd64", 15 | "armhf", 16 | "armv7", 17 | "i386" 18 | ], 19 | "map": [ 20 | "share:rw" 21 | ], 22 | "devices": [ 23 | "/dev/video0:/dev/video0:rwm" 24 | ], 25 | "options": { 26 | "config": "", 27 | "videodevice": "/dev/video0", 28 | "input": 0, 29 | "width": 1280, 30 | "height": 720, 31 | "framerate": 2, 32 | "text_right": "%Y-%m-%d %T-%q", 33 | "target_dir": "/share/motion", 34 | "snapshot_interval": 0, 35 | "snapshot_name": "%v-%Y%m%d%H%M%S-snapshot", 36 | "picture_output": "off", 37 | "picture_name": "%v-%Y%m%d%H%M%S-%q", 38 | "webcontrol_local": "off", 39 | "webcontrol_html": "off" 40 | }, 41 | "schema": { 42 | "config": "str", 43 | "videodevice": "str", 44 | "input": "int", 45 | "width": "int", 46 | "height": "int", 47 | "framerate": "int", 48 | "text_right": "str", 49 | "target_dir": "str", 50 | "snapshot_interval": "int", 51 | "snapshot_name": "str", 52 | "picture_output": "str", 53 | "picture_name": "str", 54 | "webcontrol_local": "str", 55 | "webcontrol_html": "str" 56 | } 57 | } -------------------------------------------------------------------------------- /motion/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | CONFIG_PATH=/data/options.json 5 | 6 | CONFIG=$(jq --raw-output ".config" $CONFIG_PATH) 7 | VIDEODEVICE=$(jq --raw-output ".videodevice" $CONFIG_PATH) 8 | INPUT=$(jq --raw-output ".input" $CONFIG_PATH) 9 | WIDTH=$(jq --raw-output ".width" $CONFIG_PATH) 10 | HEIGHT=$(jq --raw-output ".height" $CONFIG_PATH) 11 | FRAMERATE=$(jq --raw-output ".framerate" $CONFIG_PATH) 12 | TEXTRIGHT=$(jq --raw-output ".text_right" $CONFIG_PATH) 13 | TARGETDIR=$(jq --raw-output ".target_dir" $CONFIG_PATH) 14 | SNAPSHOTINTERVAL=$(jq --raw-output ".snapshot_interval" $CONFIG_PATH) 15 | SNAPSHOTNAME=$(jq --raw-output ".snapshot_name" $CONFIG_PATH) 16 | PICTUREOUTPUT=$(jq --raw-output ".picture_output" $CONFIG_PATH) 17 | PICTURENAME=$(jq --raw-output ".picture_name" $CONFIG_PATH) 18 | WEBCONTROLLOCAL=$(jq --raw-output ".webcontrol_local" $CONFIG_PATH) 19 | WEBCONTROLHTML=$(jq --raw-output ".webcontrol_html" $CONFIG_PATH) 20 | 21 | 22 | echo "[Info] Show connected usb devices" 23 | ls -al /dev/video* 24 | 25 | if [ ! -f "$CONFIG" ]; then 26 | sed -i "s|%%VIDEODEVICE%%|$VIDEODEVICE|g" /etc/motion.conf 27 | sed -i "s|%%INPUT%%|$INPUT|g" /etc/motion.conf 28 | sed -i "s|%%WIDTH%%|$WIDTH|g" /etc/motion.conf 29 | sed -i "s|%%HEIGHT%%|$HEIGHT|g" /etc/motion.conf 30 | sed -i "s|%%FRAMERATE%%|$FRAMERATE|g" /etc/motion.conf 31 | sed -i "s|%%TEXTRIGHT%%|$TEXTRIGHT|g" /etc/motion.conf 32 | sed -i "s|%%TARGETDIR%%|$TARGETDIR|g" /etc/motion.conf 33 | sed -i "s|%%SNAPSHOTINTERVAL%%|$SNAPSHOTINTERVAL|g" /etc/motion.conf 34 | sed -i "s|%%SNAPSHOTNAME%%|$SNAPSHOTNAME|g" /etc/motion.conf 35 | sed -i "s|%%PICTUREOUTPUT%%|$PICTUREOUTPUT|g" /etc/motion.conf 36 | sed -i "s|%%PICTURENAME%%|$PICTURENAME|g" /etc/motion.conf 37 | sed -i "s|%%WEBCONTROLLOCAL%%|$WEBCONTROLLOCAL|g" /etc/motion.conf 38 | sed -i "s|%%WEBCONTROLHTML%%|$WEBCONTROLHTML|g" /etc/motion.conf 39 | CONFIG=/etc/motion.conf 40 | fi 41 | # start server 42 | motion -c $CONFIG 43 | -------------------------------------------------------------------------------- /motion/README.md: -------------------------------------------------------------------------------- 1 | ## Motion Addon 2 | * Addon to use a usb camera, exposing an unsecured MJPEG feed on [http://homeassistant.local:8081](http://homeassistant.local:8081), and *no* images are saved to disk using the default settings. The code is [hosted on Github here](https://github.com/robmarkcole/hassio-addons) 3 | * This addon was forked from: https://github.com/lovejoy777/hassio-addons 4 | 5 | 6 | ### Home Assistant integration 7 | USE IFRAME - You can view the live MJPEG stream using: 8 | ``` 9 | camera: 10 | - platform: mjpeg 11 | mjpeg_url: http://homeassistant.local:8081 12 | name: motioncam 13 | ``` 14 | 15 | If you have configured a periodic snapshot you can display the last snapped image with: 16 | ``` 17 | camera: 18 | - platform: local_file 19 | name: motion_lastsnap 20 | file_path: /share/motion/lastsnap.jpg 21 | ``` 22 | 23 | You can view the camera images on the HA front-end using a `Picture-entity` lovelace card with config: 24 | 25 | ``` 26 | camera_view: live 27 | entity: camera.motioncam 28 | type: picture-entity 29 | ``` 30 | 31 | Be sure to [add](https://www.home-assistant.io/components/stream/) the `stream` integration to your HA config. 32 | 33 | **Note** that you may encounter an annoying issue whereby the camera stream doesn't display in the card and you see a grey box with `camera idle`. In this case you can use a [panel_iframe](https://www.home-assistant.io/components/panel_iframe/): 34 | 35 | ``` 36 | panel_iframe: 37 | motion: 38 | title: motion 39 | icon: mdi:camera 40 | url: http://homeassistant.local:8081 41 | ``` 42 | 43 | ### Settings 44 | ##### config 45 | *Optional* 46 | 47 | Path to a predefined motion.conf settings file 48 | 49 | ##### videodevice 50 | */dev/video0* 51 | 52 | ##### width 53 | *1280* 54 | 55 | Image width (pixels). Valid range: Camera dependent 56 | 57 | ##### height 58 | *720* 59 | 60 | Image height (pixels). Valid range: Camera dependent 61 | 62 | ##### framerate 63 | *2* 64 | 65 | Maximum number of frames to be captured per second. 66 | Valid range: 2-100. Default: 100 (almost no limit). 67 | 68 | ##### text_right 69 | *%Y-%m-%d %T-%q* 70 | 71 | 72 | Draws the timestamp using same options as C function strftime(3) 73 | Text is placed in lower right corner 74 | 75 | ``` 76 | %Y = year, %m = month, %d = date, 77 | %H = hour, %M = minute, %S = second, %T = HH:MM:SS, 78 | %v = event, %q = frame number, %t = camera id number, 79 | %D = changed pixels, %N = noise level, \n = new line, 80 | %i and %J = width and height of motion area, 81 | %K and %L = X and Y coordinates of motion center 82 | %C = value defined by text_event - do not use with text_event! 83 | You can put quotation marks around the text to allow leading spaces 84 | ``` 85 | 86 | ##### target_dir 87 | */share/motion* 88 | 89 | Target base directory for pictures and films 90 | Use absolute path. 91 | 92 | ##### snapshot_interval 93 | *0* 94 | 95 | Make automated snapshot every N seconds (0 = disabled). Note that this must be > 0 to save any photos. 96 | 97 | ##### snapshot_name 98 | *%v-%Y%m%d%H%M%S-snapshot* 99 | 100 | File path for snapshots (jpeg or ppm) relative to target_dir 101 | Default value is equivalent to legacy oldlayout option 102 | For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-snapshot 103 | File extension .jpg or .ppm is automatically added so do not include this. 104 | 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' 105 | 106 | ``` 107 | %Y = year, %m = month, %d = date, 108 | %H = hour, %M = minute, %S = second, %T = HH:MM:SS, 109 | %v = event, %q = frame number, %t = camera id number, 110 | %D = changed pixels, %N = noise level, \n = new line, 111 | %i and %J = width and height of motion area, 112 | %K and %L = X and Y coordinates of motion center 113 | %C = value defined by text_event - do not use with text_event! 114 | You can put quotation marks around the text to allow leading spaces 115 | ``` 116 | 117 | ##### picture_output 118 | *off* 119 | 120 | Output 'normal' pictures when motion is detected 121 | Valid values: on, off, first, best, center 122 | When set to 'first', only the first picture of an event is saved. 123 | Picture with most motion of an event is saved when set to 'best'. 124 | Picture with motion nearest center of picture is saved when set to 'center'. 125 | `on` appears to continually capture. 126 | 127 | ##### picture_name 128 | *%v-%Y%m%d%H%M%S-%q* 129 | 130 | File path for motion triggered images (jpeg or ppm) relative to target_dir 131 | Default value is equivalent to legacy oldlayout option 132 | For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q 133 | File extension .jpg or .ppm is automatically added so do not include this 134 | Set to 'preview' together with best-preview feature enables special naming convention for preview shots. See motion guide for details 135 | 136 | ``` 137 | %Y = year, %m = month, %d = date, 138 | %H = hour, %M = minute, %S = second, %T = HH:MM:SS, 139 | %v = event, %q = frame number, %t = camera id number, 140 | %D = changed pixels, %N = noise level, \n = new line, 141 | %i and %J = width and height of motion area, 142 | %K and %L = X and Y coordinates of motion center 143 | %C = value defined by text_event - do not use with text_event! 144 | You can put quotation marks around the text to allow leading spaces 145 | ``` 146 | 147 | ##### webcontrol_local 148 | *off* 149 | 150 | Restrict control connections to localhost only 151 | 152 | ##### webcontrol_html 153 | *off* 154 | 155 | Output for http server, select off to choose raw text plain 156 | -------------------------------------------------------------------------------- /motion/motion.conf: -------------------------------------------------------------------------------- 1 | # Rename this distribution example file to motion.conf 2 | # 3 | # This config file was generated by motion 4.0 4 | 5 | 6 | ############################################################ 7 | # Daemon 8 | ############################################################ 9 | 10 | # Start in daemon (background) mode and release terminal (default: off) 11 | daemon off 12 | 13 | # File to store the process ID, also called pid file. (default: not defined) 14 | process_id_file /var/run/motion/motion.pid 15 | 16 | ############################################################ 17 | # Basic Setup Mode 18 | ############################################################ 19 | 20 | # Start in Setup-Mode, daemon disabled. (default: off) 21 | setup_mode off 22 | 23 | 24 | # Use a file to save logs messages, if not defined stderr and syslog is used. (default: not defined) 25 | # logfile /share/motion/motion.log 26 | 27 | # Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL). (default: 6 / NTC) 28 | log_level 6 29 | 30 | # Filter to log messages by type (COR, STR, ENC, NET, DBL, EVT, TRK, VID, ALL). (default: ALL) 31 | log_type all 32 | 33 | ########################################################### 34 | # Capture device options 35 | ############################################################ 36 | 37 | # Videodevice to be used for capturing (default /dev/video0) 38 | # for FreeBSD default is /dev/bktr0 39 | videodevice %%VIDEODEVICE%% 40 | 41 | # v4l2_palette allows one to choose preferable palette to be use by motion 42 | # to capture from those supported by your videodevice. (default: 17) 43 | # E.g. if your videodevice supports both V4L2_PIX_FMT_SBGGR8 and 44 | # V4L2_PIX_FMT_MJPEG then motion will by default use V4L2_PIX_FMT_MJPEG. 45 | # Setting v4l2_palette to 2 forces motion to use V4L2_PIX_FMT_SBGGR8 46 | # instead. 47 | # 48 | # Values : 49 | # V4L2_PIX_FMT_SN9C10X : 0 'S910' 50 | # V4L2_PIX_FMT_SBGGR16 : 1 'BYR2' 51 | # V4L2_PIX_FMT_SBGGR8 : 2 'BA81' 52 | # V4L2_PIX_FMT_SPCA561 : 3 'S561' 53 | # V4L2_PIX_FMT_SGBRG8 : 4 'GBRG' 54 | # V4L2_PIX_FMT_SGRBG8 : 5 'GRBG' 55 | # V4L2_PIX_FMT_PAC207 : 6 'P207' 56 | # V4L2_PIX_FMT_PJPG : 7 'PJPG' 57 | # V4L2_PIX_FMT_MJPEG : 8 'MJPEG' 58 | # V4L2_PIX_FMT_JPEG : 9 'JPEG' 59 | # V4L2_PIX_FMT_RGB24 : 10 'RGB3' 60 | # V4L2_PIX_FMT_SPCA501 : 11 'S501' 61 | # V4L2_PIX_FMT_SPCA505 : 12 'S505' 62 | # V4L2_PIX_FMT_SPCA508 : 13 'S508' 63 | # V4L2_PIX_FMT_UYVY : 14 'UYVY' 64 | # V4L2_PIX_FMT_YUYV : 15 'YUYV' 65 | # V4L2_PIX_FMT_YUV422P : 16 '422P' 66 | # V4L2_PIX_FMT_YUV420 : 17 'YU12' 67 | # 68 | v4l2_palette 17 69 | 70 | # Tuner device to be used for capturing using tuner as source (default /dev/tuner0) 71 | # This is ONLY used for FreeBSD. Leave it commented out for Linux 72 | ; tunerdevice /dev/tuner0 73 | 74 | # The video input to be used (default: -1) 75 | # Should normally be set to 0 or 1 for video/TV cards, and -1 for USB cameras 76 | # Set to 0 for uvideo(4) on OpenBSD 77 | input %%INPUT%% 78 | 79 | # The video norm to use (only for video capture and TV tuner cards) 80 | # Values: 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour). Default: 0 (PAL) 81 | norm 0 82 | 83 | # The frequency to set the tuner to (kHz) (only for TV tuner cards) (default: 0) 84 | frequency 0 85 | 86 | # Override the power line frequency for the webcam. (normally not necessary) 87 | # Values: 88 | # -1 : Do not modify device setting 89 | # 0 : Power line frequency Disabled 90 | # 1 : 50hz 91 | # 2 : 60hz 92 | # 3 : Auto 93 | power_line_frequency -1 94 | 95 | # Rotate image this number of degrees. The rotation affects all saved images as 96 | # well as movies. Valid values: 0 (default = no rotation), 90, 180 and 270. 97 | rotate 0 98 | 99 | # Image width (pixels). Valid range: Camera dependent, default: 352 100 | width %%WIDTH%% 101 | 102 | # Image height (pixels). Valid range: Camera dependent, default: 288 103 | height %%HEIGHT%% 104 | 105 | # Maximum number of frames to be captured per second. 106 | # Valid range: 2-100. Default: 100 (almost no limit). 107 | framerate %%FRAMERATE%% 108 | 109 | # Minimum time in seconds between capturing picture frames from the camera. 110 | # Default: 0 = disabled - the capture rate is given by the camera framerate. 111 | # This option is used when you want to capture images at a rate lower than 2 per second. 112 | minimum_frame_time 0 113 | 114 | # URL to use if you are using a network camera, size will be autodetected (incl http:// ftp:// mjpg:// rtsp:// mjpeg:// or file:///) 115 | # Must be a URL that returns single jpeg pictures or a raw mjpeg stream. A trailing slash may be required for some cameras. 116 | # Default: Not defined 117 | ; netcam_url value 118 | 119 | # Username and password for network camera (only if required). Default: not defined 120 | # Syntax is user:password 121 | ; netcam_userpass value 122 | 123 | # The setting for keep-alive of network socket, should improve performance on compatible net cameras. 124 | # off: The historical implementation using HTTP/1.0, closing the socket after each http request. 125 | # force: Use HTTP/1.0 requests with keep alive header to reuse the same connection. 126 | # on: Use HTTP/1.1 requests that support keep alive as default. 127 | # Default: off 128 | netcam_keepalive off 129 | 130 | # URL to use for a netcam proxy server, if required, e.g. "http://myproxy". 131 | # If a port number other than 80 is needed, use "http://myproxy:1234". 132 | # Default: not defined 133 | ; netcam_proxy value 134 | 135 | # Set less strict jpeg checks for network cameras with a poor/buggy firmware. 136 | # Default: off 137 | netcam_tolerant_check off 138 | 139 | # RTSP connection uses TCP to communicate to the camera. Can prevent image corruption. 140 | # Default: on 141 | rtsp_uses_tcp on 142 | 143 | # Name of camera to use if you are using a camera accessed through OpenMax/MMAL 144 | # Default: Not defined 145 | ; mmalcam_name vc.ril.camera 146 | 147 | # Camera control parameters (see raspivid/raspistill tool documentation) 148 | # Default: Not defined 149 | ; mmalcam_control_params -hf 150 | 151 | # Let motion regulate the brightness of a video device (default: off). 152 | # The auto_brightness feature uses the brightness option as its target value. 153 | # If brightness is zero auto_brightness will adjust to average brightness value 128. 154 | # Only recommended for cameras without auto brightness 155 | auto_brightness off 156 | 157 | # Set the initial brightness of a video device. 158 | # If auto_brightness is enabled, this value defines the average brightness level 159 | # which Motion will try and adjust to. 160 | # Valid range 0-255, default 0 = disabled 161 | brightness 0 162 | 163 | # Set the contrast of a video device. 164 | # Valid range 0-255, default 0 = disabled 165 | contrast 0 166 | 167 | # Set the saturation of a video device. 168 | # Valid range 0-255, default 0 = disabled 169 | saturation 0 170 | 171 | # Set the hue of a video device (NTSC feature). 172 | # Valid range 0-255, default 0 = disabled 173 | hue 0 174 | 175 | 176 | ############################################################ 177 | # Round Robin (multiple inputs on same video device name) 178 | ############################################################ 179 | 180 | # Number of frames to capture in each roundrobin step (default: 1) 181 | roundrobin_frames 1 182 | 183 | # Number of frames to skip before each roundrobin step (default: 1) 184 | roundrobin_skip 1 185 | 186 | # Try to filter out noise generated by roundrobin (default: off) 187 | switchfilter off 188 | 189 | 190 | ############################################################ 191 | # Motion Detection Settings: 192 | ############################################################ 193 | 194 | # Threshold for number of changed pixels in an image that 195 | # triggers motion detection (default: 1500) 196 | threshold 1500 197 | 198 | # Automatically tune the threshold down if possible (default: off) 199 | threshold_tune off 200 | 201 | # Noise threshold for the motion detection (default: 32) 202 | noise_level 32 203 | 204 | # Automatically tune the noise threshold (default: on) 205 | noise_tune on 206 | 207 | # Despeckle motion image using (e)rode or (d)ilate or (l)abel (Default: not defined) 208 | # Recommended value is EedDl. Any combination (and number of) of E, e, d, and D is valid. 209 | # (l)abeling must only be used once and the 'l' must be the last letter. 210 | # Comment out to disable 211 | despeckle_filter EedDl 212 | 213 | # Detect motion in predefined areas (1 - 9). Areas are numbered like that: 1 2 3 214 | # A script (on_area_detected) is started immediately when motion is 4 5 6 215 | # detected in one of the given areas, but only once during an event. 7 8 9 216 | # One or more areas can be specified with this option. Take care: This option 217 | # does NOT restrict detection to these areas! (Default: not defined) 218 | ; area_detect value 219 | 220 | # PGM file to use as a sensitivity mask. 221 | # Full path name to. (Default: not defined) 222 | ; mask_file value 223 | 224 | # Dynamically create a mask file during operation (default: 0) 225 | # Adjust speed of mask changes from 0 (off) to 10 (fast) 226 | smart_mask_speed 0 227 | 228 | # Ignore sudden massive light intensity changes given as a percentage of the picture 229 | # area that changed intensity. Valid range: 0 - 100 , default: 0 = disabled 230 | lightswitch 0 231 | 232 | # Picture frames must contain motion at least the specified number of frames 233 | # in a row before they are detected as true motion. At the default of 1, all 234 | # motion is detected. Valid range: 1 to thousands, recommended 1-5 235 | minimum_motion_frames 1 236 | 237 | # Specifies the number of pre-captured (buffered) pictures from before motion 238 | # was detected that will be output at motion detection. 239 | # Recommended range: 0 to 5 (default: 0) 240 | # Do not use large values! Large values will cause Motion to skip video frames and 241 | # cause unsmooth movies. To smooth movies use larger values of post_capture instead. 242 | pre_capture 0 243 | 244 | # Number of frames to capture after motion is no longer detected (default: 0) 245 | post_capture 0 246 | 247 | # Event Gap is the seconds of no motion detection that triggers the end of an event. 248 | # An event is defined as a series of motion images taken within a short timeframe. 249 | # Recommended value is 60 seconds (Default). The value -1 is allowed and disables 250 | # events causing all Motion to be written to one single movie file and no pre_capture. 251 | # If set to 0, motion is running in gapless mode. Movies don't have gaps anymore. An 252 | # event ends right after no more motion is detected and post_capture is over. 253 | event_gap 60 254 | 255 | # Maximum length in seconds of a movie 256 | # When value is exceeded a new movie file is created. (Default: 0 = infinite) 257 | max_movie_time 0 258 | 259 | # Always save images even if there was no motion (default: off) 260 | emulate_motion off 261 | 262 | 263 | ############################################################ 264 | # Image File Output 265 | ############################################################ 266 | 267 | # Output 'normal' pictures when motion is detected (default: on) 268 | # Valid values: on, off, first, best, center 269 | # When set to 'first', only the first picture of an event is saved. 270 | # Picture with most motion of an event is saved when set to 'best'. 271 | # Picture with motion nearest center of picture is saved when set to 'center'. 272 | # Can be used as preview shot for the corresponding movie. 273 | output_pictures %%PICTUREOUTPUT%% 274 | 275 | # Output pictures with only the pixels moving object (ghost images) (default: off) 276 | output_debug_pictures off 277 | 278 | # The quality (in percent) to be used by the jpeg compression (default: 75) 279 | quality 75 280 | 281 | # Type of output images 282 | # Valid values: jpeg, ppm (default: jpeg) 283 | picture_type jpeg 284 | 285 | ############################################################ 286 | # FFMPEG related options 287 | # Film (movies) file output, and deinterlacing of the video input 288 | # The options movie_filename and timelapse_filename are also used 289 | # by the ffmpeg feature 290 | ############################################################ 291 | 292 | # Use ffmpeg to encode movies in realtime (default: off) 293 | ffmpeg_output_movies off 294 | 295 | # Use ffmpeg to make movies with only the pixels moving 296 | # object (ghost images) (default: off) 297 | ffmpeg_output_debug_movies off 298 | 299 | # Use ffmpeg to encode a timelapse movie 300 | # Default value 0 = off - else save frame every Nth second 301 | ffmpeg_timelapse 0 302 | 303 | # The file rollover mode of the timelapse video 304 | # Valid values: hourly, daily (default), weekly-sunday, weekly-monday, monthly, manual 305 | ffmpeg_timelapse_mode daily 306 | 307 | # Bitrate to be used by the ffmpeg encoder (default: 400000) 308 | # This option is ignored if ffmpeg_variable_bitrate is not 0 (disabled) 309 | ffmpeg_bps 400000 310 | 311 | # Enables and defines variable bitrate for the ffmpeg encoder. 312 | # ffmpeg_bps is ignored if variable bitrate is enabled. 313 | # Valid values: 0 (default) = fixed bitrate defined by ffmpeg_bps, 314 | # or the range 1 - 100 where 1 means worst quality and 100 is best. 315 | ffmpeg_variable_bitrate 0 316 | 317 | # Codec to used by ffmpeg for the video compression. 318 | # Timelapse videos have two options. 319 | # mpg - Creates mpg file with mpeg-2 encoding. 320 | # If motion is shutdown and restarted, new pics will be appended 321 | # to any previously created file with name indicated for timelapse. 322 | # mpeg4 - Creates avi file with the default encoding. 323 | # If motion is shutdown and restarted, new pics will create a 324 | # new file with the name indicated for timelapse. 325 | # Supported formats are: 326 | # mpeg4 or msmpeg4 - gives you files with extension .avi 327 | # msmpeg4 is recommended for use with Windows Media Player because 328 | # it requires no installation of codec on the Windows client. 329 | # swf - gives you a flash film with extension .swf 330 | # flv - gives you a flash video with extension .flv 331 | # ffv1 - FF video codec 1 for Lossless Encoding 332 | # mov - QuickTime 333 | # mp4 - MPEG-4 Part 14 H264 encoding 334 | # mkv - Matroska H264 encoding 335 | # hevc - H.265 / HEVC (High Efficiency Video Coding) 336 | ffmpeg_video_codec mpeg4 337 | 338 | # When creating videos, should frames be duplicated in order 339 | # to keep up with the requested frames per second 340 | # (default: true) 341 | ffmpeg_duplicate_frames true 342 | 343 | ############################################################ 344 | # SDL Window 345 | ############################################################ 346 | 347 | # Number of motion thread to show in SDL Window (default: 0 = disabled) 348 | #sdl_threadnr 0 349 | 350 | ############################################################ 351 | # External pipe to video encoder 352 | # Replacement for FFMPEG builtin encoder for ffmpeg_output_movies only. 353 | # The options movie_filename and timelapse_filename are also used 354 | # by the ffmpeg feature 355 | ############################################################# 356 | 357 | # Bool to enable or disable extpipe (default: off) 358 | use_extpipe off 359 | 360 | # External program (full path and opts) to pipe raw video to 361 | # Generally, use '-' for STDIN... 362 | ;extpipe mencoder -demuxer rawvideo -rawvideo w=%w:h=%h:i420 -ovc x264 -x264encopts bframes=4:frameref=1:subq=1:scenecut=-1:nob_adapt:threads=1:keyint=1000:8x8dct:vbv_bufsize=4000:crf=24:partitions=i8x8,i4x4:vbv_maxrate=800:no-chroma-me -vf denoise3d=16:12:48:4,pp=lb -of avi -o %f.avi - -fps %fps 363 | ;extpipe x264 - --input-res %wx%h --fps %fps --bitrate 2000 --preset ultrafast --quiet -o %f.mp4 364 | ;extpipe mencoder -demuxer rawvideo -rawvideo w=%w:h=%h:fps=%fps -ovc x264 -x264encopts preset=ultrafast -of lavf -o %f.mp4 - -fps %fps 365 | ;extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4 366 | 367 | 368 | ############################################################ 369 | # Snapshots (Traditional Periodic Webcam File Output) 370 | ############################################################ 371 | 372 | # Make automated snapshot every N seconds (default: 0 = disabled) 373 | snapshot_interval %%SNAPSHOTINTERVAL%% 374 | 375 | 376 | ############################################################ 377 | # Text Display 378 | # %Y = year, %m = month, %d = date, 379 | # %H = hour, %M = minute, %S = second, %T = HH:MM:SS, 380 | # %v = event, %q = frame number, %t = camera id number, 381 | # %D = changed pixels, %N = noise level, \n = new line, 382 | # %i and %J = width and height of motion area, 383 | # %K and %L = X and Y coordinates of motion center 384 | # %C = value defined by text_event - do not use with text_event! 385 | # You can put quotation marks around the text to allow 386 | # leading spaces 387 | ############################################################ 388 | 389 | # Locate and draw a box around the moving object. 390 | # Valid values: on, off, preview (default: off) 391 | # Set to 'preview' will only draw a box in preview_shot pictures. 392 | locate_motion_mode off 393 | 394 | # Set the look and style of the locate box if enabled. 395 | # Valid values: box, redbox, cross, redcross (default: box) 396 | # Set to 'box' will draw the traditional box. 397 | # Set to 'redbox' will draw a red box. 398 | # Set to 'cross' will draw a little cross to mark center. 399 | # Set to 'redcross' will draw a little red cross to mark center. 400 | locate_motion_style box 401 | 402 | # Draws the timestamp using same options as C function strftime(3) 403 | # Default: %Y-%m-%d\n%T = date in ISO format and time in 24 hour clock 404 | # Text is placed in lower right corner 405 | text_right %%TEXTRIGHT%% 406 | 407 | # Draw a user defined text on the images using same options as C function strftime(3) 408 | # Default: Not defined = no text 409 | # Text is placed in lower left corner 410 | ; text_left CAMERA %t 411 | 412 | # Draw the number of changed pixed on the images (default: off) 413 | # Will normally be set to off except when you setup and adjust the motion settings 414 | # Text is placed in upper right corner 415 | text_changes off 416 | 417 | # This option defines the value of the special event conversion specifier %C 418 | # You can use any conversion specifier in this option except %C. Date and time 419 | # values are from the timestamp of the first image in the current event. 420 | # Default: %Y%m%d%H%M%S 421 | # The idea is that %C can be used filenames and text_left/right for creating 422 | # a unique identifier for each event. 423 | text_event %Y%m%d%H%M%S 424 | 425 | # Draw characters at twice normal size on images. (default: off) 426 | text_double off 427 | 428 | 429 | # Text to include in a JPEG EXIF comment 430 | # May be any text, including conversion specifiers. 431 | # The EXIF timestamp is included independent of this text. 432 | ;exif_text %i%J/%K%L 433 | 434 | ############################################################ 435 | # Target Directories and filenames For Images And Films 436 | # For the options snapshot_, picture_, movie_ and timelapse_filename 437 | # you can use conversion specifiers 438 | # %Y = year, %m = month, %d = date, 439 | # %H = hour, %M = minute, %S = second, 440 | # %v = event, %q = frame number, %t = camera id number, 441 | # %D = changed pixels, %N = noise level, 442 | # %i and %J = width and height of motion area, 443 | # %K and %L = X and Y coordinates of motion center 444 | # %C = value defined by text_event 445 | # Quotation marks round string are allowed. 446 | ############################################################ 447 | 448 | # Target base directory for pictures and films 449 | # Recommended to use absolute path. (Default: current working directory) 450 | target_dir %%TARGETDIR%% 451 | 452 | # File path for snapshots (jpeg or ppm) relative to target_dir 453 | # Default: %v-%Y%m%d%H%M%S-snapshot 454 | # Default value is equivalent to legacy oldlayout option 455 | # For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-snapshot 456 | # File extension .jpg or .ppm is automatically added so do not include this. 457 | # Note: A symbolic link called lastsnap.jpg created in the target_dir will always 458 | # point to the latest snapshot, unless snapshot_filename is exactly 'lastsnap' 459 | snapshot_filename %%SNAPSHOTNAME%% 460 | 461 | # File path for motion triggered images (jpeg or ppm) relative to target_dir 462 | # Default: %v-%Y%m%d%H%M%S-%q 463 | # Default value is equivalent to legacy oldlayout option 464 | # For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q 465 | # File extension .jpg or .ppm is automatically added so do not include this 466 | # Set to 'preview' together with best-preview feature enables special naming 467 | # convention for preview shots. See motion guide for details 468 | picture_filename %%PICTURENAME%% 469 | 470 | # File path for motion triggered ffmpeg films (movies) relative to target_dir 471 | # Default: %v-%Y%m%d%H%M%S 472 | # File extensions(.mpg .avi) are automatically added so do not include them 473 | movie_filename %v-%Y%m%d%H%M%S 474 | 475 | # File path for timelapse movies relative to target_dir 476 | # Default: %Y%m%d-timelapse 477 | # File extensions(.mpg .avi) are automatically added so do not include them 478 | timelapse_filename %Y%m%d-timelapse 479 | 480 | ############################################################ 481 | # Global Network Options 482 | ############################################################ 483 | # Enable IPv6 (default: off) 484 | ipv6_enabled off 485 | 486 | ############################################################ 487 | # Live Stream Server 488 | ############################################################ 489 | 490 | # The mini-http server listens to this port for requests (default: 0 = disabled) 491 | stream_port 8081 492 | 493 | # Quality of the jpeg (in percent) images produced (default: 50) 494 | stream_quality 50 495 | 496 | # Output frames at 1 fps when no motion is detected and increase to the 497 | # rate given by stream_maxrate when motion is detected (default: off) 498 | stream_motion off 499 | 500 | # Maximum framerate for stream streams (default: 1) 501 | stream_maxrate 1 502 | 503 | # Restrict stream connections to localhost only (default: on) 504 | stream_localhost off 505 | 506 | # Limits the number of images per connection (default: 0 = unlimited) 507 | # Number can be defined by multiplying actual stream rate by desired number of seconds 508 | # Actual stream rate is the smallest of the numbers framerate and stream_maxrate 509 | stream_limit 0 510 | 511 | # Set the authentication method (default: 0) 512 | # 0 = disabled 513 | # 1 = Basic authentication 514 | # 2 = MD5 digest (the safer authentication) 515 | stream_auth_method 0 516 | 517 | # Authentication for the stream. Syntax username:password 518 | # Default: not defined (Disabled) 519 | ; stream_authentication username:password 520 | 521 | # Percentage to scale the stream image for preview 522 | # Default: 25 523 | ; stream_preview_scale 25 524 | 525 | # Have stream preview image start on a new line 526 | # Default: no 527 | ; stream_preview_newline no 528 | 529 | ############################################################ 530 | # HTTP Based Control 531 | ############################################################ 532 | 533 | # TCP/IP port for the http server to listen on (default: 0 = disabled) 534 | webcontrol_port 8080 535 | 536 | # Restrict control connections to localhost only (default: on) 537 | webcontrol_localhost %%WEBCONTROLLOCAL%% 538 | 539 | # Output for http server, select off to choose raw text plain (default: on) 540 | webcontrol_html_output %%WEBCONTROLHTML%% 541 | 542 | # Authentication for the http based control. Syntax username:password 543 | # Default: not defined (Disabled) 544 | ; webcontrol_authentication username:password 545 | 546 | 547 | ############################################################ 548 | # Tracking (Pan/Tilt) 549 | ############################################################# 550 | 551 | # Type of tracker (0=none (default), 1=stepper, 2=iomojo, 3=pwc, 4=generic, 5=uvcvideo, 6=servo) 552 | # The generic type enables the definition of motion center and motion size to 553 | # be used with the conversion specifiers for options like on_motion_detected 554 | track_type 0 555 | 556 | # Enable auto tracking (default: off) 557 | track_auto off 558 | 559 | # Serial port of motor (default: none) 560 | ;track_port /dev/ttyS0 561 | 562 | # Motor number for x-axis (default: 0) 563 | ;track_motorx 0 564 | 565 | # Set motorx reverse (default: 0) 566 | ;track_motorx_reverse 0 567 | 568 | # Motor number for y-axis (default: 0) 569 | ;track_motory 1 570 | 571 | # Set motory reverse (default: 0) 572 | ;track_motory_reverse 0 573 | 574 | # Maximum value on x-axis (default: 0) 575 | ;track_maxx 200 576 | 577 | # Minimum value on x-axis (default: 0) 578 | ;track_minx 50 579 | 580 | # Maximum value on y-axis (default: 0) 581 | ;track_maxy 200 582 | 583 | # Minimum value on y-axis (default: 0) 584 | ;track_miny 50 585 | 586 | # Center value on x-axis (default: 0) 587 | ;track_homex 128 588 | 589 | # Center value on y-axis (default: 0) 590 | ;track_homey 128 591 | 592 | # ID of an iomojo camera if used (default: 0) 593 | track_iomojo_id 0 594 | 595 | # Angle in degrees the camera moves per step on the X-axis 596 | # with auto-track (default: 10) 597 | # Currently only used with pwc type cameras 598 | track_step_angle_x 10 599 | 600 | # Angle in degrees the camera moves per step on the Y-axis 601 | # with auto-track (default: 10) 602 | # Currently only used with pwc type cameras 603 | track_step_angle_y 10 604 | 605 | # Delay to wait for after tracking movement as number 606 | # of picture frames (default: 10) 607 | track_move_wait 10 608 | 609 | # Speed to set the motor to (stepper motor option) (default: 255) 610 | track_speed 255 611 | 612 | # Number of steps to make (stepper motor option) (default: 40) 613 | track_stepsize 40 614 | 615 | 616 | ############################################################ 617 | # External Commands, Warnings and Logging: 618 | # You can use conversion specifiers for the on_xxxx commands 619 | # %Y = year, %m = month, %d = date, 620 | # %H = hour, %M = minute, %S = second, 621 | # %v = event, %q = frame number, %t = camera id number, 622 | # %D = changed pixels, %N = noise level, 623 | # %i and %J = width and height of motion area, 624 | # %K and %L = X and Y coordinates of motion center 625 | # %C = value defined by text_event 626 | # %f = filename with full path 627 | # %n = number indicating filetype 628 | # Both %f and %n are only defined for on_picture_save, 629 | # on_movie_start and on_movie_end 630 | # Quotation marks round string are allowed. 631 | ############################################################ 632 | 633 | # Do not sound beeps when detecting motion (default: on) 634 | # Note: Motion never beeps when running in daemon mode. 635 | quiet on 636 | 637 | # Command to be executed when an event starts. (default: none) 638 | # An event starts at first motion detected after a period of no motion defined by event_gap 639 | ; on_event_start value 640 | 641 | # Command to be executed when an event ends after a period of no motion 642 | # (default: none). The period of no motion is defined by option event_gap. 643 | ; on_event_end value 644 | 645 | # Command to be executed when a picture (.ppm|.jpg) is saved (default: none) 646 | # To give the filename as an argument to a command append it with %f 647 | ; on_picture_save value 648 | 649 | # Command to be executed when a motion frame is detected (default: none) 650 | ; on_motion_detected value 651 | 652 | # Command to be executed when motion in a predefined area is detected 653 | # Check option 'area_detect'. (default: none) 654 | ; on_area_detected value 655 | 656 | # Command to be executed when a movie file (.mpg|.avi) is created. (default: none) 657 | # To give the filename as an argument to a command append it with %f 658 | ; on_movie_start value 659 | 660 | # Command to be executed when a movie file (.mpg|.avi) is closed. (default: none) 661 | # To give the filename as an argument to a command append it with %f 662 | ; on_movie_end value 663 | 664 | # Command to be executed when a camera can't be opened or if it is lost 665 | # NOTE: There is situations when motion don't detect a lost camera! 666 | # It depends on the driver, some drivers dosn't detect a lost camera at all 667 | # Some hangs the motion thread. Some even hangs the PC! (default: none) 668 | ; on_camera_lost value 669 | 670 | ##################################################################### 671 | # Common Options for database features. 672 | # Options require database options to be active also. 673 | ##################################################################### 674 | 675 | # Log to the database when creating motion triggered picture file (default: on) 676 | ; sql_log_picture on 677 | 678 | # Log to the database when creating a snapshot image file (default: on) 679 | ; sql_log_snapshot on 680 | 681 | # Log to the database when creating motion triggered movie file (default: off) 682 | ; sql_log_movie off 683 | 684 | # Log to the database when creating timelapse movies file (default: off) 685 | ; sql_log_timelapse off 686 | 687 | # SQL query string that is sent to the database 688 | # Use same conversion specifiers has for text features 689 | # Additional special conversion specifiers are 690 | # %n = the number representing the file_type 691 | # %f = filename with full path 692 | # Default value: 693 | # Create tables : 694 | ## 695 | # Mysql 696 | # CREATE TABLE security (camera int, filename char(80) not null, frame int, file_type int, time_stamp timestamp(14), event_time_stamp timestamp(14)); 697 | # 698 | # Postgresql 699 | # 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); 700 | # 701 | # insert into security(camera, filename, frame, file_type, time_stamp, text_event) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C') 702 | ; 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') 703 | 704 | 705 | ############################################################ 706 | # Database Options 707 | ############################################################ 708 | 709 | # database type : mysql, postgresql, sqlite3 (default : not defined) 710 | ; database_type value 711 | 712 | # database to log to (default: not defined) 713 | # for sqlite3, the full path and name for the database. 714 | ; database_dbname value 715 | 716 | # The host on which the database is located (default: localhost) 717 | ; database_host value 718 | 719 | # User account name for database (default: not defined) 720 | ; database_user value 721 | 722 | # User password for database (default: not defined) 723 | ; database_password value 724 | 725 | # Port on which the database is located 726 | # mysql 3306 , postgresql 5432 (default: not defined) 727 | ; database_port value 728 | 729 | # Database wait time in milliseconds for locked database to 730 | # be unlocked before returning database locked error (default 0) 731 | ; database_busy_timeout 0 732 | 733 | 734 | 735 | ############################################################ 736 | # Video Loopback Device (vloopback project) 737 | ############################################################ 738 | 739 | # Output images to a video4linux loopback device 740 | # The value '-' means next available (default: not defined) 741 | ; video_pipe value 742 | 743 | # Output motion images to a video4linux loopback device 744 | # The value '-' means next available (default: not defined) 745 | ; motion_video_pipe value 746 | 747 | 748 | ############################################################## 749 | # camera config files - One for each camera. 750 | # Except if only one camera - You only need this config file. 751 | # If you have more than one camera you MUST define one camera 752 | # config file for each camera in addition to this config file. 753 | ############################################################## 754 | 755 | # Remember: If you have more than one camera you must have one 756 | # camera file for each camera. E.g. 2 cameras requires 3 files: 757 | # This motion.conf file AND camera1.conf and camera2.conf. 758 | # Only put the options that are unique to each camera in the 759 | # camera config files. 760 | ; camera /etc/motion/camera1.conf 761 | ; camera /etc/motion/camera2.conf 762 | ; camera /etc/motion/camera3.conf 763 | ; camera /etc/motion/camera4.conf 764 | 765 | 766 | ############################################################## 767 | # Camera config directory - One for each camera. 768 | ############################################################## 769 | # 770 | ; camera_dir /etc/motion/conf.d 771 | --------------------------------------------------------------------------------