diff --git a/README.md b/README.md
index 423e017..4bb2ffc 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,26 @@
# cctv-scheduler
+
PTZ IP-Camera management
![cctv-scheduler](info/images/cctv-scheduler-0.1.png)
+
## `Installation`
+
### `Requirements`
+
Cameras settings:
+>
> - Configuration -> System -> Security -> Authentication -> RTSP Authentication: digest/basic
> - Configuration -> System -> Security -> Authentication -> WEB Authentication: digest/basic
> - Configuration -> Network -> Advanced Settings -> Integration Protocol -> Enable Hikvision-CGI: Enabled
> - Configuration -> Network -> Advanced Settings -> Integration Protocol -> Hikvision-CGI Authentication: digest/basic
Look at the description of dependencies and install the necessary.
+
### `Downloading`
+
Download scripts and configs.
+
```bash
wget https://git.hmp.today/pavel.muhortov/cctv-scheduler/raw/branch/master/sequences.sh -O /home/user/cctv-scheduler/sequences.sh
wget https://git.hmp.today/pavel.muhortov/cctv-scheduler/raw/branch/master/sequences.conf -O /home/user/cctv-scheduler/sequences.conf
@@ -23,66 +31,84 @@ wget https://git.hmp.today/pavel.muhortov/cctv-scheduler/raw/branch/master/publi
wget https://git.hmp.today/pavel.muhortov/cctv-scheduler/raw/branch/master/publisher-template-page-1007.xml -O /home/user/cctv-scheduler/publisher-template-page-1007.xml
wget https://git.hmp.today/pavel.muhortov/cctv-scheduler/raw/branch/master/streaming.py -O /home/user/cctv-scheduler/streaming.py
```
+
### `Configuration`
+
Edit configs.
+
```bash
nano /home/user/cctv-scheduler/sequences.conf
nano /home/user/cctv-scheduler/converter.conf
nano /home/user/cctv-scheduler/publisher.conf
```
+
### `Scheduler`
+
Look at examples and edit scheduler tasks:
+
```bash
crontab -e
```
-____
-* [`sequences.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#sequences-sh)
-* [`converter.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#converter-sh)
-* [`publisher.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#publisher-sh)
-* [`streaming.py`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#streaming-py)
____
+
+- [`sequences.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#sequences-sh)
+- [`converter.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#converter-sh)
+- [`publisher.sh`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#publisher-sh)
+- [`streaming.py`](https://git.hmp.today/pavel.muhortov/cctv-scheduler#streaming-py)
+
+____
+
## `sequences`.sh
+
**Description:**
> [Hikvision](https://git.hmp.today/pavel.muhortov/cctv-scheduler/src/branch/master/info/hikvision/manual/isapi.pdf) PTZ-camera sequences.
> Additionally:
+>
> - getting temperature from DS18B20 over SSH,
> - saving pictures to FTP.
>
> This is only a local "proof of conept" for testing and debugging.
**Dependencies:**
+>
> - [bash](https://www.gnu.org/software/bash/) (tested version 5.1.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [curl](https://curl.se/download.html) (tested version 7.74 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [sshpass](https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/) (tested version 1.09 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
-
| POSITION | PARAMETERS | DESCRIPTION | DEFAULT |
|-----------|--------------|------------------------|---------------|
| 1 | **[qn]** |execution without pauses||
| 2 | **[/path/to/conf]** |path to config| ./sequences.conf |
-
Example usage in terminal with bash:
+
```bash
bash ./sequences.sh - ./sequences.conf
```
+
Example usage with cron:
+
```bash
# crontab -e
0 * * * * bash /home/user/cctv-scheduler/sequences.sh qn
```
+
____
+
## `converter`.sh
+
**Description:**
> JPEG to MP4 converter.
>
> This is only a local "proof of conept" for testing and debugging.
**Dependencies:**
+>
> - [bash](https://www.gnu.org/software/bash/) (tested version 5.1.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [ffmpeg](https://ffmpeg.org/download.html) (tested version 4.3.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - filesystem organization:
+>
>```bash
> # filesystem organisation example
>/root/
@@ -109,12 +135,14 @@ ____
| 2 | **[/path/to/conf]** |path to config| ./converter.conf |
| 3 | **[-d\|-w\|-m\|-y]** |periods: '' - today \| '-d' - yesterday \| '-w' - last week \| '-m' - last month \| '-y' - last year||
-
Example usage in terminal with bash for today's MP4 making:
+
```bash
bash ./converter.sh - ./converter.conf
```
+
Example usage with cron:
+
```bash
# crontab -e
1 0 * * * bash /home/user/cctv-scheduler/converter.sh qn - -d
@@ -122,17 +150,22 @@ Example usage with cron:
30 0 1 * * bash /home/user/cctv-scheduler/converter.sh qn - -m
36 0 1 1 * bash /home/user/cctv-scheduler/converter.sh qn - -y
```
+
____
+
## `publisher`.sh
+
**Description:**
> Uploading MP4 to [Wordpress](https://wordpress.com/) and [Telegram](https://web.telegram.org/).
> Additionally:
+>
> - editing [Wordpress](https://codex.wordpress.org/XML-RPC_WordPress_API) page from template
> - recompressing video if size [over 50MB](https://core.telegram.org/bots/api#sendvideo)
>
> This is only a local "proof of conept" for testing and debugging.
**Dependencies:**
+>
> - [bash](https://www.gnu.org/software/bash/) (tested version 5.1.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [curl](https://curl.se/download.html) (tested version 7.74 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [ffmpeg](https://ffmpeg.org/download.html) (tested version 4.3.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
@@ -148,12 +181,14 @@ ____
| 4 | **[1\|2\|3..XXX]** |multiplier for period: '' - 1 day\|week\|month\|year|1|
| 5 | **[--onlytg\|--onlywp]** |'--onlytg' - only publish to Telegram \|'--onlywp' - only publish to Wordpress||
+Example usage in terminal with bash for publish to Telegram today's MP4:
-Example usage in terminal with bash for publish today's MP4 maked:
```bash
-bash ./publisher.sh - ./publisher.conf - --onlytg
+bash ./publisher.sh - ./publisher.conf - - - - --onlytg
```
+
Example usage with cron:
+
```bash
# crontab -e
1 1 * * * bash /home/user/cctv-scheduler/publisher.sh qn - -d
@@ -161,12 +196,16 @@ Example usage with cron:
30 1 1 * * bash /home/user/cctv-scheduler/publisher.sh qn - -m
36 1 1 1 * bash /home/user/cctv-scheduler/publisher.sh qn - -y
```
+
____
+
## `streaming`.py
+
**Description:**
> FFmpeg management from Python
**Dependencies:**
+>
> - [Python 3](https://www.python.org/downloads/) (tested version 3.9.5 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
> - [ffmpeg](https://ffmpeg.org/download.html) (tested version 4.3.4 on [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/))
@@ -183,19 +222,24 @@ ____
|**[--mono]**|detect ffmpeg running copy and terminate||
Example usage in terminal with make the script executable:
+
```bash
chmod u+x ./streaming.py
./streaming.py -s rtsp://user:pass@host:554/Streaming/Channels/101 --dst rtp://239.0.0.1:5554
```
+
Example usage with cron:
+
```bash
# crontab -e
* * * * * /usr/bin/python3 /home/user/cctv-scheduler/streaming.py -s rtsp://user:pass@host:554/Streaming/Channels/video,http://Streaming/Channels/audio --dst rtmp://a.rtmp.youtube.com/live2/YOUKEY --mono --watchdog --sec 30 >> /dev/null 2>&1
* * * * * /usr/bin/python3 /home/user/cctv-scheduler/streaming.py -s ~/media.mp4 --dst rtmp://b.rtmp.youtube.com/live2?backup=1/YOUKEY --mono >> /dev/null 2>&1
```
+
Example usage in Python:
+
```Python
from streaming import FFmpeg
FFmpeg.run(src='null, anull', preset='240p', fps=10)
-```
\ No newline at end of file
+```
diff --git a/converter.sh b/converter.sh
index 0157a41..fcdd1ba 100644
--- a/converter.sh
+++ b/converter.sh
@@ -1,165 +1,208 @@
#! /bin/bash
+# DESCRIPTION:
+# Converting JPEG collection to MP4.
+# This is only a local "proof of conept" for testing and debugging.
#
-## DESCRIPTION:
-# JPEG to MP4 converter.
-# This is only a local "proof of conept" for testing and debugging.
-#
-
-#
-## DEPENDENCIES: sudo apt|yum install -y ffmpeg
-#
-
-#
-## FUNCTIONS
+# DEPENDENCIES:
+# - ffmpeg
+#
+# PARAMETERS:
+# 1: "qn" - execution without pauses
+# 2: custom configuration file path
+# 3: periods: '' - today | '-d' - yesterday | '-w' - last week | '-m' - last month | '-y' - last year
+#
+# FUNCTIONS:
#
+#######################################
+# Print message and add to log.
+# Globals:
+# logs
+# Arguments:
+# 1: message to print and logging
+#######################################
addtologs() {
- echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a $logs
+ echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a "${logs}"
}
+
+#######################################
+# Waiting for press [ENTER].
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
execpause() {
- read -p "Press [ENTER] to continue... "
+ read -r -p "Press [ENTER] to continue... "
}
+
+#######################################
+# Exit procedure.
+# Globals:
+# show
+# Arguments:
+# None
+#######################################
execquite() {
- addtologs "execution time is $(($(date +%s)-$time)) seconds, exit"
- if [ "${show}" != "qn" ];then
- execpause
- fi
- exit
+ addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
+ if [ "${show}" != "qn" ]; then
+ execpause
+ fi
+ exit
}
+
+#######################################
+# Error exit procedure with Telegram notification.
+# Globals:
+# telegramapiurl
+# telegramchatid
+# Arguments:
+# 1: message to print and logging
+#######################################
execerror() {
- addtologs "error: $1"
- curl -s -X POST $telegramapiurl/sendMessage -d chat_id=$telegramchatid -d text="$(basename -s .sh $0) error: $1" >> /dev/null 2>&1
- execquite
+ addtologs "error: $1"
+ curl -s -X POST "${telegramapiurl}/sendMessage" \
+ -d "chat_id=${telegramchatid}" \
+ -d "text=$(basename -s .sh "$0") error: $1" \
+ >> /dev/null 2>&1
+ execquite
}
+
+#######################################
+# Parsing config file and creating global vars.
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
getconfig() {
- logs=$(cat $conf | grep "logs=" | cut -d= -f2)
- list=$(cat $conf | grep "list=" | cut -d= -f2)
- imgroot=$(cat $conf | grep "imgroot=" | cut -d= -f2)
- imgnames=($(cat $conf | grep "imgnames=" | cut -d= -f2))
- xscale=$(cat $conf | grep "xscale=" | cut -d= -f2)
- yscale=$(cat $conf | grep "yscale=" | cut -d= -f2)
- mp4fps=$(cat $conf | grep "mp4fps=" | cut -d= -f2)
- telegramapiurl=$(cat $conf | grep "telegramapiurl=" | cut -d= -f2)
- telegramchatid=$(cat $conf | grep "telegramchatid=" | cut -d= -f2)
+ logs=$(grep "logs=" "${conf}" | cut -d= -f2)
+ list=$(grep "list=" "${conf}" | cut -d= -f2)
+ imgroot=$(grep "imgroot=" "${conf}" | cut -d= -f2)
+ IFS=" " read -r -a imgnames <<< "$(grep "imgnames=" "${conf}" | cut -d= -f2)"
+ xscale=$(grep "xscale=" "${conf}" | cut -d= -f2)
+ yscale=$(grep "yscale=" "${conf}" | cut -d= -f2)
+ mp4fps=$(grep "mp4fps=" "${conf}" | cut -d= -f2)
+ telegramapiurl=$(grep "telegramapiurl=" "${conf}" | cut -d= -f2)
+ telegramchatid=$(grep "telegramchatid=" "${conf}" | cut -d= -f2)
}
#
-## PARAMETERS
+## VARIABLES:
#
-show=${1}
-conf=${2}
-if [ -z "${conf}" ] || [ "${conf}" == "-" ];then
- conf="$(dirname $(realpath "$0"))/$(basename -s .sh $0).conf"
+show=$1
+conf=$2
+if [ -z "${conf}" ] || [ "${conf}" == "-" ]; then
+ conf="$(dirname "$(realpath "$0")")/$(basename -s .sh "$0").conf"
fi
-when=${3}
-if [ -z "$when" ]; then
- d=$(date +"%d")
- w=$(date +"%V")
- m=$(date +"%m")
- y=$(date +"%Y")
- duration=1
- imgpath=$y/$m/$w/$d
- imgname=$y.$m.$d
+when=$3
+if [ -z "${when}" ]; then
+ d=$(date +"%d")
+ w=$(date +"%V")
+ m=$(date +"%m")
+ y=$(date +"%Y")
+ duration=1
+ imgpath="${y}/${m}/${w}/${d}"
+ imgname="${y}.${m}.${d}"
fi
-if [ "$when" == "-d" ]; then
- d=$(date -d "-1 day" +"%d")
- m=$(date +"%m")
- if [ "$(date -d '-1 day' +'%m')" != "$(date +'%m')" ]; then
- m=$(date -d '-1 day' +'%m')
- fi
- y=$(date +"%Y")
- if [ "$(date -d '-1 day' +'%Y')" != "$(date +'%Y')" ]; then
- y=$(date -d '-1 day' +'%Y')
- fi
- w=$(date +"%V")
- if [ "$(date +'%w')" == "1" ]; then
- w=$(date -d "-1 week" +"%V")
- fi
- duration=1
- imgpath=$y/$m/$w/$d
- imgname=$y.$m.$d
+if [ "${when}" == "-d" ]; then
+ d=$(date -d "-1 day" +"%d")
+ m=$(date +"%m")
+ if [ "$(date -d '-1 day' +'%m')" != "$(date +'%m')" ]; then
+ m=$(date -d '-1 day' +'%m')
+ fi
+ y=$(date +"%Y")
+ if [ "$(date -d '-1 day' +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d '-1 day' +'%Y')
+ fi
+ w=$(date +"%V")
+ if [ "$(date +'%w')" == "1" ]; then
+ w=$(date -d "-1 week" +"%V")
+ fi
+ duration=1
+ imgpath="${y}/${m}/${w}/${d}"
+ imgname="${y}.${m}.${d}"
fi
-if [ "$when" == "-w" ]; then
- w=$(date -d "-1 week" +"%V")
- m=$(date +"%m")
- if [ "$(date -d '-1 week' +'%m')" != "$(date +'%m')" ]; then
- m=$(date -d '-1 week' +'%m')
- fi
- y=$(date +"%Y")
- if [ "$(date -d '-1 week' +'%Y')" != "$(date +'%Y')" ]; then
- y=$(date -d '-1 week' +'%Y')
- fi
- duration=7
- imgpath=$y/*/$w
- imgname=$y-w$w
+if [ "${when}" == "-w" ]; then
+ w=$(date -d "-1 week" +"%V")
+ m=$(date +"%m")
+ if [ "$(date -d '-1 week' +'%m')" != "$(date +'%m')" ]; then
+ m=$(date -d '-1 week' +'%m')
+ fi
+ y=$(date +"%Y")
+ if [ "$(date -d '-1 week' +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d '-1 week' +'%Y')
+ fi
+ duration=7
+ imgpath="${y}/*/${w}"
+ imgname="${y}-w${w}"
fi
-if [ "$when" == "-m" ]; then
- m=$(date -d "-1 month" +"%m")
- y=$(date +"%Y")
- if [ "$(date -d '-1 month' +'%Y')" != "$(date +'%Y')" ]; then
- y=$(date -d '-1 month' +'%Y')
- fi
- duration=30
- imgpath=$y/$m
- imgname=$y.$m
+if [ "${when}" == "-m" ]; then
+ m=$(date -d "-1 month" +"%m")
+ y=$(date +"%Y")
+ if [ "$(date -d '-1 month' +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d '-1 month' +'%Y')
+ fi
+ duration=30
+ imgpath="${y}/${m}"
+ imgname="${y}.${m}"
fi
-if [ "$when" == "-y" ]; then
- y=$(date -d "-1 year" +"%Y")
- duration=360
- imgpath=$y
- imgname=$y
+if [ "${when}" == "-y" ]; then
+ y=$(date -d "-1 year" +"%Y")
+ duration=360
+ imgpath="${y}"
+ imgname="${y}"
fi
-#
-## VARIABLES
-#
-
time=$(date +%s)
-cd "$(dirname "$(realpath "$0")")"
-if [ ! -e ${conf} ];then
- execerror "Not found config file: ${conf}"
+cd "$(dirname "$(realpath "$0")")" || execerror
+if [ ! -e "${conf}" ]; then
+ execerror "Not found config file: ${conf}"
else
- getconfig
+ getconfig
fi
if [ -z "${logs}" ];then
- logs=/dev/null
-elif [ ! -e ${logs} ];then
- touch ${logs}
+ logs=/dev/null
+elif [ ! -e "${logs}" ];then
+ touch "${logs}"
fi
if [ -z "${list}" ];then
- list="$(dirname $(realpath "$0"))/$(basename -s .sh $0).list"
+ list="$(dirname "$(realpath "$0")")/$(basename -s .sh "$0").list"
fi
-if [ ! -e ${list} ];then
- touch ${list}
+if [ ! -e "${list}" ];then
+ touch "${list}"
fi
if ! command -v ffmpeg &> /dev/null; then
- execerror "Not found dependencies"
+ execerror "Not found dependencies"
fi
#
-## RUN
+# MAIN:
#
-for name in ${imgnames[*]}; do
- imgmatch="*$name*.jpeg"
- imgarray=()
- while read FILE; do
- imgarray+=("${FILE}")
- done < <(find $imgroot/$imgpath -name "$imgmatch" | sort)
- imgcount=${#imgarray[*]}
+for name in "${imgnames[@]}"; do
+ imgmatch="*${name}*.jpeg"
+ imgarray=()
+ while read -r FILE; do
+ imgarray+=("${FILE}")
+ done < <(find "${imgroot}/${imgpath}" -name "${imgmatch}" | sort)
+ imgcount=${#imgarray[*]}
- echo '' > $list
- for item in ${imgarray[*]}; do
- echo file \'$item\' >> $list
- done
+ echo '' > "${list}"
+ for item in "${imgarray[@]}"; do
+ echo file \'"${item}"\' >> "${list}"
+ done
- imgdest=$imgroot/$name\_$imgname.mp4
- echo $imgdest
- #ffmpeg -r $imgcount/$duration -f concat -safe 0 -i $list -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t $duration -c:v libx264 -vf "scale=$xscale:$yscale,fps=$mp4fps,format=yuv420p" -c:a aac $imgdest -y
- ffmpeg -r $imgcount/$duration -f concat -safe 0 -i $list -c:v libx264 -vf "scale=$xscale:$yscale,fps=$mp4fps,format=yuv420p" $imgdest -y \
- && addtologs "converted $imgcount images to $imgdest with duration $duration" \
- || execerror "converted $imgcount images to $imgdest with duration $duration"
+ imgdest="${imgroot}/${name}_${imgname}.mp4"
+ echo "${imgdest}"
+ if ffmpeg -r "${imgcount}/${duration}" -f concat -safe 0 -i "${list}" \
+ -c:v libx264 -vf "scale=${xscale}:${yscale},fps=${mp4fps},format=yuv420p" \
+ "${imgdest}" -y; then
+ addtologs "converted ${imgcount} images to ${imgdest} with duration ${duration}"
+ else
+ execerror "converted ${imgcount} images to ${imgdest} with duration ${duration}"
+ fi
done
execquite
diff --git a/publisher.sh b/publisher.sh
index 1846b68..fdc6625 100644
--- a/publisher.sh
+++ b/publisher.sh
@@ -1,525 +1,599 @@
#! /bin/bash
+# DESCRIPTION:
+# Uploading MP4 to Wordpress and Telegram.
+# Additionally:
+# - editing Wordpress page from template
+# - recompressing video if size over 50MB
+# This is only a local "proof of conept" for testing and debugging.
#
-## DESCRIPTION:
-# Uploading MP4 to Wordpress and Telegram.
-# Additionally:
-# - editing Wordpress page from template
-# - recompressing video if size over 50MB
-# This is only a local "proof of conept" for testing and debugging.
-#
-
-#
-## DEPENDENCIES: sudo apt|yum install -y curl ffmpeg libxml2-utils jq
-#
-
-#
-## FUNCTIONS
+# DEPENDENCIES:
+# - curl
+# - ffmpeg
+# - libxml2-utils
+# - jq
+#
+# PARAMETERS:
+# 1: "qn" - execution without pauses
+# 2: custom configuration file path
+# 3: periods: '' - today | '-d' - yesterday | '-w' - last week | '-m' - last month | '-y' - last year
+# 4: period multiplier: '' - 1 day|week|month|year
+# 5: publishing '--onlytg' - only to Telegram | '--onlywp' - only to Wordpress
+#
+# FUNCTIONS:
#
+#######################################
+# Print message and add to log.
+# Globals:
+# logs
+# Arguments:
+# 1: message to print and logging
+#######################################
addtologs() {
- echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a $logs
+ echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a "${logs}"
}
+
+#######################################
+# Waiting for press [ENTER].
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
execpause() {
- read -p "Press [ENTER] to continue... "
+ read -r -p "Press [ENTER] to continue... "
}
+
+#######################################
+# Exit procedure.
+# Globals:
+# show
+# Arguments:
+# None
+#######################################
execquite() {
- addtologs "execution time is $(($(date +%s)-$time)) seconds, exit"
- if [ "${show}" != "qn" ];then
- execpause
- fi
- exit
+ addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
+ if [ "${show}" != "qn" ]; then
+ execpause
+ fi
+ exit
}
+
+#######################################
+# Error exit procedure with Telegram notification.
+# Globals:
+# telegramapiurl
+# telegramchatid
+# Arguments:
+# 1: message to print and logging
+#######################################
execerror() {
- addtologs "error: $1"
- curl -s -X POST $telegramapiurl/sendMessage -d chat_id=$telegramchatid -d text="$(basename -s .sh $0) error: $1" >> /dev/null 2>&1
- execquite
+ addtologs "error: $1"
+ curl -s -X POST "${telegramapiurl}/sendMessage" \
+ -d "chat_id=${telegramchatid}" \
+ -d "text=$(basename -s .sh "$0") error: $1" \
+ >> /dev/null 2>&1
+ execquite
}
+
+#######################################
+# Parsing config file and creating global vars.
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
getconfig() {
- logs=$(cat $conf | grep "logs=" | cut -d= -f2)
- pathroot=$(cat $conf | grep "pathroot=" | cut -d= -f2)
- vidnamesarray=($(cat $conf | grep "vidnamesarray=" | cut -d= -f2))
- telegramapiurl=$(cat $conf | grep "telegramapiurl=" | cut -d= -f2)
- telegramchatid=$(cat $conf | grep "telegramchatid=" | cut -d= -f2)
- tgpreviewlink=$(cat $conf | grep "tgpreviewlink=" | cut -d= -f2)
- tgpreviewtext=$(cat $conf | grep "tgpreviewtext=" | cut -d= -f2)
- wpxmlrpclink=$(cat $conf | grep "wpxmlrpclink=" | cut -d= -f2)
- wpxmlrpcuser=$(cat $conf | grep "wpxmlrpcuser=" | cut -d= -f2)
- wpxmlrpcpass=$(cat $conf | grep "wpxmlrpcpass=" | cut -d= -f2)
- wppageauthor=$(cat $conf | grep "wppageauthor=" | cut -d= -f2)
- wppagelinkis=$(cat $conf | grep "wppagelinkis=" | cut -d= -f2)
- wpeditpageid=$(cat $conf | grep "wpeditpageid=" | cut -d= -f2)
- wpedituserid=$(cat $conf | grep "wpedituserid=" | cut -d= -f2)
- wpeditdateis=$(cat $conf | grep "wpeditdateis=" | cut -d= -f2)
- wptemplateis=$(cat $conf | grep "wptemplateis=" | cut -d= -f2)
- youtubelink=$(cat $conf | grep "youtubelink=" | cut -d= -f2)
+ logs=$(grep "logs=" "${conf}" | cut -d= -f2)
+ pathroot=$(grep "pathroot=" "${conf}" | cut -d= -f2)
+ IFS=" " read -r -a vidnamesarray <<< "$(grep "vidnamesarray=" "${conf}" | cut -d= -f2)"
+ telegramapiurl=$(grep "telegramapiurl=" "${conf}" | cut -d= -f2)
+ telegramchatid=$(grep "telegramchatid=" "${conf}" | cut -d= -f2)
+ tgpreviewlink=$(grep "tgpreviewlink=" "${conf}" | cut -d= -f2)
+ tgpreviewtext=$(grep "tgpreviewtext=" "${conf}" | cut -d= -f2)
+ wpxmlrpclink=$(grep "wpxmlrpclink=" "${conf}" | cut -d= -f2)
+ wpxmlrpcuser=$(grep "wpxmlrpcuser=" "${conf}" | cut -d= -f2)
+ wpxmlrpcpass=$(grep "wpxmlrpcpass=" "${conf}" | cut -d= -f2)
+ wppageauthor=$(grep "wppageauthor=" "${conf}" | cut -d= -f2)
+ wppagelinkis=$(grep "wppagelinkis=" "${conf}" | cut -d= -f2)
+ wpeditpageid=$(grep "wpeditpageid=" "${conf}" | cut -d= -f2)
+ wpedituserid=$(grep "wpedituserid=" "${conf}" | cut -d= -f2)
+ wpeditdateis=$(grep "wpeditdateis=" "${conf}" | cut -d= -f2)
+ wptemplateis=$(grep "wptemplateis=" "${conf}" | cut -d= -f2)
+ youtubelink=$(grep "youtubelink=" "${conf}" | cut -d= -f2)
- defaultdp01=($(cat $conf | grep "defaultdp01=" | cut -d= -f2))
- defaultwp01=($(cat $conf | grep "defaultwp01=" | cut -d= -f2))
- defaultmp01=($(cat $conf | grep "defaultmp01=" | cut -d= -f2))
- defaultyp01=($(cat $conf | grep "defaultyp01=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp01 <<< "$(grep "defaultdp01=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp01 <<< "$(grep "defaultwp01=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp01 <<< "$(grep "defaultmp01=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp01 <<< "$(grep "defaultyp01=" "${conf}" | cut -d= -f2)"
- defaultdp02=($(cat $conf | grep "defaultdp02=" | cut -d= -f2))
- defaultwp02=($(cat $conf | grep "defaultwp02=" | cut -d= -f2))
- defaultmp02=($(cat $conf | grep "defaultmp02=" | cut -d= -f2))
- defaultyp02=($(cat $conf | grep "defaultyp02=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp02 <<< "$(grep "defaultdp02=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp02 <<< "$(grep "defaultwp02=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp02 <<< "$(grep "defaultmp02=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp02 <<< "$(grep "defaultyp02=" "${conf}" | cut -d= -f2)"
- defaultdp04=($(cat $conf | grep "defaultdp04=" | cut -d= -f2))
- defaultwp04=($(cat $conf | grep "defaultwp04=" | cut -d= -f2))
- defaultmp04=($(cat $conf | grep "defaultmp04=" | cut -d= -f2))
- defaultyp04=($(cat $conf | grep "defaultyp04=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp04 <<< "$(grep "defaultdp04=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp04 <<< "$(grep "defaultwp04=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp04 <<< "$(grep "defaultmp04=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp04 <<< "$(grep "defaultyp04=" "${conf}" | cut -d= -f2)"
- defaultdp05=($(cat $conf | grep "defaultdp05=" | cut -d= -f2))
- defaultwp05=($(cat $conf | grep "defaultwp05=" | cut -d= -f2))
- defaultmp05=($(cat $conf | grep "defaultmp05=" | cut -d= -f2))
- defaultyp05=($(cat $conf | grep "defaultyp05=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp05 <<< "$(grep "defaultdp05=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp05 <<< "$(grep "defaultwp05=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp05 <<< "$(grep "defaultmp05=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp05 <<< "$(grep "defaultyp05=" "${conf}" | cut -d= -f2)"
- defaultdp11=($(cat $conf | grep "defaultdp11=" | cut -d= -f2))
- defaultwp11=($(cat $conf | grep "defaultwp11=" | cut -d= -f2))
- defaultmp11=($(cat $conf | grep "defaultmp11=" | cut -d= -f2))
- defaultyp11=($(cat $conf | grep "defaultyp11=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp11 <<< "$(grep "defaultdp11=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp11 <<< "$(grep "defaultwp11=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp11 <<< "$(grep "defaultmp11=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp11 <<< "$(grep "defaultyp11=" "${conf}" | cut -d= -f2)"
- defaultdp12=($(cat $conf | grep "defaultdp12=" | cut -d= -f2))
- defaultwp12=($(cat $conf | grep "defaultwp12=" | cut -d= -f2))
- defaultmp12=($(cat $conf | grep "defaultmp12=" | cut -d= -f2))
- defaultyp12=($(cat $conf | grep "defaultyp12=" | cut -d= -f2))
+ IFS=" " read -r -a defaultdp12 <<< "$(grep "defaultdp12=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultwp12 <<< "$(grep "defaultwp12=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultmp12 <<< "$(grep "defaultmp12=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a defaultyp12 <<< "$(grep "defaultyp12=" "${conf}" | cut -d= -f2)"
+ IFS=" " read -r -a currentdp01 <<< "$(grep "currentdp01=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp01[1]}" ]; then
+ currentdp01=${defaultdp01[*]}
+ fi
+ IFS=" " read -r -a currentwp01 <<< "$(grep "currentwp01=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp01[1]}" ]; then
+ currentwp01=${defaultwp01[*]}
+ fi
+ IFS=" " read -r -a currentmp01 <<< "$(grep "currentmp01=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp01[1]}" ]; then
+ currentmp01=${defaultmp01[*]}
+ fi
+ IFS=" " read -r -a currentyp01 <<< "$(grep "currentyp01=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp01[1]}" ]; then
+ currentyp01=${defaultyp01[*]}
+ fi
- currentdp01=($(cat $conf | grep "currentdp01=" | cut -d= -f2))
- if [ -z "$currentdp01" ];then
- currentdp01=(${defaultdp01[*]})
- fi
- currentwp01=($(cat $conf | grep "currentwp01=" | cut -d= -f2))
- if [ -z "$currentwp01" ];then
- currentwp01=(${defaultwp01[*]})
- fi
- currentmp01=($(cat $conf | grep "currentmp01=" | cut -d= -f2))
- if [ -z "$currentmp01" ];then
- currentmp01=(${defaultmp01[*]})
- fi
- currentyp01=($(cat $conf | grep "currentyp01=" | cut -d= -f2))
- if [ -z "$currentyp01" ];then
- currentyp01=(${defaultyp01[*]})
- fi
+ IFS=" " read -r -a currentdp02 <<< "$(grep "currentdp02=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp02[1]}" ]; then
+ currentdp02=${defaultdp02[*]}
+ fi
+ IFS=" " read -r -a currentwp02 <<< "$(grep "currentwp02=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp02[1]}" ]; then
+ currentwp02=${defaultwp02[*]}
+ fi
+ IFS=" " read -r -a currentmp02 <<< "$(grep "currentmp02=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp02[1]}" ]; then
+ currentmp02=${defaultmp02[*]}
+ fi
+ IFS=" " read -r -a currentyp02 <<< "$(grep "currentyp02=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp02[1]}" ]; then
+ currentyp02=${defaultyp02[*]}
+ fi
- currentdp02=($(cat $conf | grep "currentdp02=" | cut -d= -f2))
- if [ -z "$currentdp02" ];then
- currentdp02=(${defaultdp02[*]})
- fi
- currentwp02=($(cat $conf | grep "currentwp02=" | cut -d= -f2))
- if [ -z "$currentwp02" ];then
- currentwp02=(${defaultwp02[*]})
- fi
- currentmp02=($(cat $conf | grep "currentmp02=" | cut -d= -f2))
- if [ -z "$currentmp02" ];then
- currentmp02=(${defaultmp02[*]})
- fi
- currentyp02=($(cat $conf | grep "currentyp02=" | cut -d= -f2))
- if [ -z "$currentyp02" ];then
- currentyp02=(${defaultyp02[*]})
- fi
+ IFS=" " read -r -a currentdp04 <<< "$(grep "currentdp04=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp04[1]}" ]; then
+ currentdp04=${defaultdp04[*]}
+ fi
+ IFS=" " read -r -a currentwp04 <<< "$(grep "currentwp04=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp04[1]}" ]; then
+ currentwp04=${defaultwp04[*]}
+ fi
+ IFS=" " read -r -a currentmp04 <<< "$(grep "currentmp04=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp04[1]}" ]; then
+ currentmp04=${defaultmp04[*]}
+ fi
+ IFS=" " read -r -a currentyp04 <<< "$(grep "currentyp04=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp04[1]}" ]; then
+ currentyp04=${defaultyp04[*]}
+ fi
- currentdp04=($(cat $conf | grep "currentdp04=" | cut -d= -f2))
- if [ -z "$currentdp04" ];then
- currentdp04=(${defaultdp04[*]})
- fi
- currentwp04=($(cat $conf | grep "currentwp04=" | cut -d= -f2))
- if [ -z "$currentwp04" ];then
- currentwp04=(${defaultwp04[*]})
- fi
- currentmp04=($(cat $conf | grep "currentmp04=" | cut -d= -f2))
- if [ -z "$currentmp04" ];then
- currentmp04=(${defaultmp04[*]})
- fi
- currentyp04=($(cat $conf | grep "currentyp04=" | cut -d= -f2))
- if [ -z "$currentyp04" ];then
- currentyp04=(${defaultyp04[*]})
- fi
+ IFS=" " read -r -a currentdp05 <<< "$(grep "currentdp05=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp05[1]}" ]; then
+ currentdp05=${defaultdp05[*]}
+ fi
+ IFS=" " read -r -a currentwp05 <<< "$(grep "currentwp05=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp05[1]}" ]; then
+ currentwp05=${defaultwp05[*]}
+ fi
+ IFS=" " read -r -a currentmp05 <<< "$(grep "currentmp05=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp05[1]}" ]; then
+ currentmp05=${defaultmp05[*]}
+ fi
+ IFS=" " read -r -a currentyp05 <<< "$(grep "currentyp05=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp05[1]}" ]; then
+ currentyp05=${defaultyp05[*]}
+ fi
- currentdp05=($(cat $conf | grep "currentdp05=" | cut -d= -f2))
- if [ -z "$currentdp05" ];then
- currentdp05=(${defaultdp05[*]})
- fi
- currentwp05=($(cat $conf | grep "currentwp05=" | cut -d= -f2))
- if [ -z "$currentwp05" ];then
- currentwp05=(${defaultwp05[*]})
- fi
- currentmp05=($(cat $conf | grep "currentmp05=" | cut -d= -f2))
- if [ -z "$currentmp05" ];then
- currentmp05=(${defaultmp05[*]})
- fi
- currentyp05=($(cat $conf | grep "currentyp05=" | cut -d= -f2))
- if [ -z "$currentyp05" ];then
- currentyp05=(${defaultyp05[*]})
- fi
+ IFS=" " read -r -a currentdp11 <<< "$(grep "currentdp11=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp11[1]}" ]; then
+ currentdp11=${defaultdp11[*]}
+ fi
+ IFS=" " read -r -a currentwp11 <<< "$(grep "currentwp11=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp11[1]}" ]; then
+ currentwp11=${defaultwp11[*]}
+ fi
+ IFS=" " read -r -a currentmp11 <<< "$(grep "currentmp11=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp11[1]}" ]; then
+ currentmp11=${defaultmp11[*]}
+ fi
+ IFS=" " read -r -a currentyp11 <<< "$(grep "currentyp11=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp11[1]}" ]; then
+ currentyp11=${defaultyp11[*]}
+ fi
- currentdp11=($(cat $conf | grep "currentdp11=" | cut -d= -f2))
- if [ -z "$currentdp11" ];then
- currentdp11=(${defaultdp11[*]})
- fi
- currentwp11=($(cat $conf | grep "currentwp11=" | cut -d= -f2))
- if [ -z "$currentwp11" ];then
- currentwp11=(${defaultwp11[*]})
- fi
- currentmp11=($(cat $conf | grep "currentmp11=" | cut -d= -f2))
- if [ -z "$currentmp11" ];then
- currentmp11=(${defaultmp11[*]})
- fi
- currentyp11=($(cat $conf | grep "currentyp11=" | cut -d= -f2))
- if [ -z "$currentyp11" ];then
- currentyp11=(${defaultyp11[*]})
- fi
-
- currentdp12=($(cat $conf | grep "currentdp12=" | cut -d= -f2))
- if [ -z "$currentdp12" ];then
- currentdp12=(${defaultdp12[*]})
- fi
- currentwp12=($(cat $conf | grep "currentwp12=" | cut -d= -f2))
- if [ -z "$currentwp12" ];then
- currentwp12=(${defaultwp12[*]})
- fi
- currentmp12=($(cat $conf | grep "currentmp12=" | cut -d= -f2))
- if [ -z "$currentmp12" ];then
- currentmp12=(${defaultmp12[*]})
- fi
- currentyp12=($(cat $conf | grep "currentyp12=" | cut -d= -f2))
- if [ -z "$currentyp12" ];then
- currentyp12=(${defaultyp12[*]})
- fi
+ IFS=" " read -r -a currentdp12 <<< "$(grep "currentdp12=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentdp12[1]}" ]; then
+ currentdp12=${defaultdp12[*]}
+ fi
+ IFS=" " read -r -a currentwp12 <<< "$(grep "currentwp12=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentwp12[1]}" ]; then
+ currentwp12=${defaultwp12[*]}
+ fi
+ IFS=" " read -r -a currentmp12 <<< "$(grep "currentmp12=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentmp12[1]}" ]; then
+ currentmp12=${defaultmp12[*]}
+ fi
+ IFS=" " read -r -a currentyp12 <<< "$(grep "currentyp12=" "${conf}" | cut -d= -f2)"
+ if [ -z "${currentyp12[1]}" ]; then
+ currentyp12=${defaultyp12[*]}
+ fi
}
+
+#######################################
+# Writing changes to configuration file.
+# Globals:
+# conf
+# when
+# vidnamesarray
+# vidlinksarray
+# Arguments:
+# None
+#######################################
setconfig() {
- if [ -z "$target" ] || [ "$target" == "-d" ];then
- if [ ! -z "${vidnamesarray[0]}" ] && [ ! -z "${vidlinksarray[0]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp01=')#currentdp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[1]}" ] && [ ! -z "${vidlinksarray[1]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp02=')#currentdp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[2]}" ] && [ ! -z "${vidlinksarray[2]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp04=')#currentdp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[3]}" ] && [ ! -z "${vidlinksarray[3]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp05=')#currentdp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[4]}" ] && [ ! -z "${vidlinksarray[4]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp11=')#currentdp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[5]}" ] && [ ! -z "${vidlinksarray[5]}" ];then
- sed -i "s#$(cat $conf | grep 'currentdp12=')#currentdp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" $conf
- fi
- fi
- if [ "$target" == "-w" ];then
- if [ ! -z "${vidnamesarray[0]}" ] && [ ! -z "${vidlinksarray[0]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp01=')#currentwp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[1]}" ] && [ ! -z "${vidlinksarray[1]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp02=')#currentwp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[2]}" ] && [ ! -z "${vidlinksarray[2]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp04=')#currentwp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[3]}" ] && [ ! -z "${vidlinksarray[3]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp05=')#currentwp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[4]}" ] && [ ! -z "${vidlinksarray[4]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp11=')#currentwp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[5]}" ] && [ ! -z "${vidlinksarray[5]}" ];then
- sed -i "s#$(cat $conf | grep 'currentwp12=')#currentwp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" $conf
- fi
- fi
- if [ "$target" == "-m" ];then
- if [ ! -z "${vidnamesarray[0]}" ] && [ ! -z "${vidlinksarray[0]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp01=')#currentmp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[1]}" ] && [ ! -z "${vidlinksarray[1]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp02=')#currentmp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[2]}" ] && [ ! -z "${vidlinksarray[2]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp04=')#currentmp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[3]}" ] && [ ! -z "${vidlinksarray[3]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp05=')#currentmp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[4]}" ] && [ ! -z "${vidlinksarray[4]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp11=')#currentmp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[5]}" ] && [ ! -z "${vidlinksarray[5]}" ];then
- sed -i "s#$(cat $conf | grep 'currentmp12=')#currentmp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" $conf
- fi
- fi
- if [ "$target" == "-y" ];then
- if [ ! -z "${vidnamesarray[0]}" ] && [ ! -z "${vidlinksarray[0]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp01=')#currentyp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[1]}" ] && [ ! -z "${vidlinksarray[1]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp02=')#currentyp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[2]}" ] && [ ! -z "${vidlinksarray[2]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp04=')#currentyp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[3]}" ] && [ ! -z "${vidlinksarray[3]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp05=')#currentyp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[4]}" ] && [ ! -z "${vidlinksarray[4]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp11=')#currentyp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" $conf
- fi
- if [ ! -z "${vidnamesarray[5]}" ] && [ ! -z "${vidlinksarray[5]}" ];then
- sed -i "s#$(cat $conf | grep 'currentyp12=')#currentyp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" $conf
- fi
- fi
+ if [ -z "${when}" ] || [ "${when}" == "-d" ]; then
+ if [ -n "${vidnamesarray[0]}" ] && [ -n "${vidlinksarray[0]}" ]; then
+ sed -i "s#$(grep 'currentdp01=' "${conf}")#currentdp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[1]}" ] && [ -n "${vidlinksarray[1]}" ]; then
+ sed -i "s#$(grep 'currentdp02=' "${conf}")#currentdp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[2]}" ] && [ -n "${vidlinksarray[2]}" ]; then
+ sed -i "s#$(grep 'currentdp04=' "${conf}")#currentdp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[3]}" ] && [ -n "${vidlinksarray[3]}" ]; then
+ sed -i "s#$(grep 'currentdp05=' "${conf}")#currentdp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[4]}" ] && [ -n "${vidlinksarray[4]}" ]; then
+ sed -i "s#$(grep 'currentdp11=' "${conf}")#currentdp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[5]}" ] && [ -n "${vidlinksarray[5]}" ]; then
+ sed -i "s#$(grep 'currentdp12=' "${conf}")#currentdp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" "${conf}"
+ fi
+ fi
+ if [ "${when}" == "-w" ]; then
+ if [ -n "${vidnamesarray[0]}" ] && [ -n "${vidlinksarray[0]}" ]; then
+ sed -i "s#$(grep 'currentwp01=' "${conf}")#currentwp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[1]}" ] && [ -n "${vidlinksarray[1]}" ]; then
+ sed -i "s#$(grep 'currentwp02=' "${conf}")#currentwp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[2]}" ] && [ -n "${vidlinksarray[2]}" ]; then
+ sed -i "s#$(grep 'currentwp04=' "${conf}")#currentwp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[3]}" ] && [ -n "${vidlinksarray[3]}" ]; then
+ sed -i "s#$(grep 'currentwp05=' "${conf}")#currentwp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[4]}" ] && [ -n "${vidlinksarray[4]}" ]; then
+ sed -i "s#$(grep 'currentwp11=' "${conf}")#currentwp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[5]}" ] && [ -n "${vidlinksarray[5]}" ]; then
+ sed -i "s#$(grep 'currentwp12=' "${conf}")#currentwp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" "${conf}"
+ fi
+ fi
+ if [ "${when}" == "-m" ]; then
+ if [ -n "${vidnamesarray[0]}" ] && [ -n "${vidlinksarray[0]}" ]; then
+ sed -i "s#$(grep 'currentmp01=' "${conf}")#currentmp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[1]}" ] && [ -n "${vidlinksarray[1]}" ]; then
+ sed -i "s#$(grep 'currentmp02=' "${conf}")#currentmp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[2]}" ] && [ -n "${vidlinksarray[2]}" ]; then
+ sed -i "s#$(grep 'currentmp04=' "${conf}")#currentmp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[3]}" ] && [ -n "${vidlinksarray[3]}" ]; then
+ sed -i "s#$(grep 'currentmp05=' "${conf}")#currentmp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[4]}" ] && [ -n "${vidlinksarray[4]}" ]; then
+ sed -i "s#$(grep 'currentmp11=' "${conf}")#currentmp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[5]}" ] && [ -n "${vidlinksarray[5]}" ]; then
+ sed -i "s#$(grep 'currentmp12=' "${conf}")#currentmp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" "${conf}"
+ fi
+ fi
+ if [ "${when}" == "-y" ]; then
+ if [ -n "${vidnamesarray[0]}" ] && [ -n "${vidlinksarray[0]}" ]; then
+ sed -i "s#$(grep 'currentyp01=' "${conf}")#currentyp01=${vidnamesarray[0]} ${vidlinksarray[0]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[1]}" ] && [ -n "${vidlinksarray[1]}" ]; then
+ sed -i "s#$(grep 'currentyp02=' "${conf}")#currentyp02=${vidnamesarray[1]} ${vidlinksarray[1]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[2]}" ] && [ -n "${vidlinksarray[2]}" ]; then
+ sed -i "s#$(grep 'currentyp04=' "${conf}")#currentyp04=${vidnamesarray[2]} ${vidlinksarray[2]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[3]}" ] && [ -n "${vidlinksarray[3]}" ]; then
+ sed -i "s#$(grep 'currentyp05=' "${conf}")#currentyp05=${vidnamesarray[3]} ${vidlinksarray[3]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[4]}" ] && [ -n "${vidlinksarray[4]}" ]; then
+ sed -i "s#$(grep 'currentyp11=' "${conf}")#currentyp11=${vidnamesarray[4]} ${vidlinksarray[4]}#" "${conf}"
+ fi
+ if [ -n "${vidnamesarray[5]}" ] && [ -n "${vidlinksarray[5]}" ]; then
+ sed -i "s#$(grep 'currentyp12=' "${conf}")#currentyp12=${vidnamesarray[5]} ${vidlinksarray[5]}#" "${conf}"
+ fi
+ fi
}
#
-## PARAMETERS
+## VARIABLES:
#
-show=${1}
-conf=${2}
-if [ -z "${conf}" ] || [ "${conf}" == "-" ];then
- conf="$(dirname $(realpath "$0"))/$(basename -s .sh $0).conf"
+show=$1
+conf=$2
+if [ -z "${conf}" ] || [ "${conf}" == "-" ]; then
+ conf="$(dirname "$(realpath "$0")")/$(basename -s .sh "$0").conf"
fi
-ever=${4}
-if [ -z "$ever" ] || [ "$ever" == "-" ];then
- ever=1
+ever=$4
+if [ -z "${ever}" ] || [ "${ever}" == "-" ]; then
+ ever=1
fi
-if [ ! -z $(echo "$ever" | grep -o "^[0-9][0-9]*$") ];then
- :
+if grep -q -o "^[0-9][0-9]*$" <<< "${ever}"; then
+ :
else
- execerror "$ever - wrong argument"
+ execerror "${ever} - wrong argument"
fi
-when=${3}
-if [ -z "$when" ];then
- viddate=$(date +"%Y").$(date +"%m").$(date +"%d")
+when=$3
+if [ -z "${when}" ]; then
+ viddate=$(date +"%Y").$(date +"%m").$(date +"%d")
fi
-if [ "$when" == "-d" ];then
- d=$(date -d "-${ever} day" +"%d")
- m=$(date +"%m")
- if [ "$(date -d "-${ever} day" +'%m')" != "$(date +'%m')" ];then
- m=$(date -d "-${ever} day" +'%m')
- fi
- y=$(date +"%Y")
- if [ "$(date -d "-${ever} day" +'%Y')" != "$(date +'%Y')" ];then
- y=$(date -d "-${ever} day" +'%Y')
- fi
- viddate=${y}.${m}.${d}
+if [ "${when}" == "-d" ]; then
+ d=$(date -d "-${ever} day" +"%d")
+ m=$(date +"%m")
+ if [ "$(date -d "-${ever} day" +'%m')" != "$(date +'%m')" ]; then
+ m=$(date -d "-${ever} day" +'%m')
+ fi
+ y=$(date +"%Y")
+ if [ "$(date -d "-${ever} day" +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d "-${ever} day" +'%Y')
+ fi
+ viddate="${y}.${m}.${d}"
fi
-if [ "$when" == "-w" ];then
- w=$(date -d "-${ever} week" +"%V")
- y=$(date +"%Y")
- if [ "$(date -d "-${ever} week" +'%Y')" != "$(date +'%Y')" ];then
- y=$(date -d "-${ever} week" +'%Y')
- fi
- viddate=${y}-w${w}
+if [ "${when}" == "-w" ]; then
+ w=$(date -d "-${ever} week" +"%V")
+ y=$(date +"%Y")
+ if [ "$(date -d "-${ever} week" +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d "-${ever} week" +'%Y')
+ fi
+ viddate="${y}-w${w}"
fi
-if [ "$when" == "-m" ];then
- m=$(date -d "-${ever} month" +"%m")
- y=$(date +"%Y")
- if [ "$(date -d "-${ever} month" +'%Y')" != "$(date +'%Y')" ];then
- y=$(date -d "-${ever} month" +'%Y')
- fi
- viddate=${y}.${m}
+if [ "${when}" == "-m" ]; then
+ m=$(date -d "-${ever} month" +"%m")
+ y=$(date +"%Y")
+ if [ "$(date -d "-${ever} month" +'%Y')" != "$(date +'%Y')" ]; then
+ y=$(date -d "-${ever} month" +'%Y')
+ fi
+ viddate="${y}.${m}"
fi
-if [ "$when" == "-y" ];then
- y=$(date -d "-${ever} year" +"%Y")
- viddate=${y}
+if [ "${when}" == "-y" ]; then
+ y=$(date -d "-${ever} year" +"%Y")
+ viddate="${y}"
fi
-vidname=${viddate}.mp4
-only=${5}
-
-#
-## VARIABLES
-#
+vidname="${viddate}.mp4"
+only=$5
time=$(date +%s)
-cd "$(dirname "$(realpath "$0")")"
-if [ ! -e ${conf} ];then
- execerror "Not found config file: ${conf}"
+cd "$(dirname "$(realpath "$0")")" || execerror
+if [ ! -e "${conf}" ]; then
+ execerror "Not found config file: ${conf}"
else
- getconfig
+ getconfig
fi
-if [ -z "${logs}" ];then
- logs=/dev/null
-elif [ ! -e ${logs} ];then
- touch ${logs}
+if [ -z "${logs}" ]; then
+ logs=/dev/null
+elif [ ! -e "${logs}" ]; then
+ touch "${logs}"
fi
-if ! command -v curl &> /dev/null || ! command -v ffmpeg &> /dev/null || ! command -v xmllint &> /dev/null || ! command -v jq &> /dev/null; then
- execerror "Not found dependencies"
+if ! command -v curl &> /dev/null || \
+ ! command -v ffmpeg &> /dev/null || \
+ ! command -v xmllint &> /dev/null || \
+ ! command -v jq &> /dev/null; then
+ execerror "Not found dependencies"
fi
#
-## RUN
+# MAIN:
#
vidpathsarray=()
vidlinksarray=()
vidtgidsarray=()
vidtgcpsarray=()
-for name in ${vidnamesarray[*]}
-do
- vidmatch=$name\_$vidname
- while read FILE; do
- vidpathsarray+=("${FILE}")
- done < <(find $pathroot -name "*$vidmatch" | sort)
+for name in "${vidnamesarray[@]}"; do
+ vidmatch="${name}_${vidname}"
+ while read -r FILE; do
+ vidpathsarray+=("${FILE}")
+ done < <(find "${pathroot}" -name "*${vidmatch}" | sort)
done
-for item in "${!vidpathsarray[@]}"
-do
- ### WORDPRESS UPLOAD VIDEO
- if [ ! "$only" == "--onlytg" ];then
- # This realisation isn't optimal, but it fixes a few issues with large files:
- # variable=$(base64 $file) -> "xrealloc: cannot allocate"
- # response=$(curl -X POST -d @${file}.xml $url) -> "curl: option -d: out of memory"
- filetype=video/mp4
- echo '
- wp.uploadFile
-
- 1
- '"${wpxmlrpcuser}"'
- '"${wpxmlrpcpass}"'
-
- name'"$(basename ${vidpathsarray[$item]})"'
- type'"${filetype}"'
- bits' > ${vidpathsarray[$item]}.xml
- base64 --wrap=0 ${vidpathsarray[$item]} >> ${vidpathsarray[$item]}.xml
- echo '
-
-
- ' >> ${vidpathsarray[$item]}.xml
- curl -X POST -T ${vidpathsarray[$item]}.xml $wpxmlrpclink > ${vidpathsarray[$item]}-response.xml \
- && vidlinksarray+=("$(xmllint --xpath '//member[contains(name,"link")]/value/string/text()' ${vidpathsarray[$item]}-response.xml)") \
- && vidlinkcodeis=$(curl --output /dev/null --silent --write-out "%{http_code}" ${vidlinksarray[$item]}) \
- || execerror "${vidpathsarray[$item]}-response.xml"
- if [[ ${vidlinkcodeis} -eq 200 ]];then
- rm ${vidpathsarray[$item]}.xml
- rm ${vidpathsarray[$item]}-response.xml
- echo "$(date +'%Y.%m.%d-%H:%M:%S') sent ${vidpathsarray[$item]} to ${vidlinksarray[$item]}" | tee -a $logs
- echo -e "WORDPRESS UPLOAD VIDEO RESULT:"
- echo -e "item: $item"
- echo -e "type: $filetype"
- echo -e "name: ${vidnamesarray[$item]}"
- echo -e "base: $(basename ${vidpathsarray[$item]})"
- echo -e "path: ${vidpathsarray[$item]}"
- echo -e "link: ${vidlinksarray[$item]}"
- echo -e "code: $vidlinkcodeis"
- else
- vidlinksarray[$item]=''
- fi
- fi
- ### TELEGRAM SEND/UPLOAD VIDEO
- if [ ! "$only" == "--onlywp" ];then
- videofullpath=${vidpathsarray[$item]}
- vidcompressed=$(echo ${vidpathsarray[$item]} | sed -e 's/.mp4/-compressed.mp4/g')
- if [ -n "$(find "$videofullpath" -prune -size +51380224c)" ];then
- duration=$(ffprobe -i "$videofullpath" -show_entries format=duration -v quiet -of csv="p=0" | cut -d'.' -f 1) \
- && ffmpeg -i "$videofullpath" -c:v libx264 -b:v $((49*8*1000/$duration))k -vf "scale=960:540,fps=25,format=yuv420p" -preset veryslow "$vidcompressed" -y -loglevel quiet -stats \
- && videofullpath=$vidcompressed \
- || execerror "ffmpeg convert ${videofullpath} to ${vidcompressed}"
- fi
- response=$(curl -s -F chat_id=$telegramchatid \
- -F video=@${videofullpath} \
- -F caption="$(echo $(basename ${videofullpath}) | sed -e 's/.mp4//g')" \
- $telegramapiurl/sendVideo) \
- && curl -s -F chat_id=$telegramchatid \
- -F message_id=$(echo $response | jq -r '.result.message_id') \
- $telegramapiurl/deleteMessage \
- && vidtgidsarray+=("$(echo $response | jq -r '.result.video.file_id')") \
- && vidtgcpsarray+=("$(echo $response | jq -r '.result.caption')") \
- && echo "$(date +'%Y.%m.%d-%H:%M:%S') sent ${videofullpath} to ${vidtgidsarray[$item]} Telegram file ID" | tee -a $logs \
- || execerror "sent ${videofullpath} to $telegramchatid Telegram Chat ID"
- if [ -e $vidcompressed ];then
- rm $vidcompressed
- fi
- fi
+for item in "${!vidpathsarray[@]}"; do
+ # WORDPRESS UPLOAD VIDEO
+ if [ ! "$only" == "--onlytg" ]; then
+ # This realisation isn't optimal, but it fixes a few issues with large files:
+ # variable=$(base64 $file) -> "xrealloc: cannot allocate"
+ # response=$(curl -X POST -d @${file}.xml $url) -> "curl: option -d: out of memory"
+ filetype="video/mp4"
+ echo '
+ wp.uploadFile
+
+ 1
+ '"${wpxmlrpcuser}"'
+ '"${wpxmlrpcpass}"'
+
+ name'"$(basename "${vidpathsarray[$item]}")"'
+ type'"${filetype}"'
+ bits' > "${vidpathsarray[$item]}.xml"
+ base64 --wrap=0 "${vidpathsarray[$item]}" >> "${vidpathsarray[$item]}.xml"
+ echo '
+
+
+ ' >> "${vidpathsarray[$item]}.xml"
+ response="${vidpathsarray[$item]}-response.xml"
+ if curl -X POST -T "${vidpathsarray[$item]}.xml" "${wpxmlrpclink}" > "${response}"; then
+ vidlinksarray+=("$(xmllint --xpath '//member[contains(name,"link")]/value/string/text()' "${response}")")
+ vidlinkcodeis=$(curl --output /dev/null --silent --write-out "%{http_code}" "${vidlinksarray[$item]}")
+ else
+ execerror "${response}"
+ fi
+ if [[ ${vidlinkcodeis} -eq 200 ]]; then
+ rm "${vidpathsarray[$item]}.xml"
+ rm "${response}"
+ echo "$(date +'%Y.%m.%d-%H:%M:%S') sent ${vidpathsarray[$item]} to ${vidlinksarray[$item]}" | tee -a "${logs}"
+ echo -e "WORDPRESS UPLOAD VIDEO RESULT:"
+ echo -e "item: ${item}"
+ echo -e "type: ${filetype}"
+ echo -e "name: ${vidnamesarray[$item]}"
+ echo -e "base: $(basename "${vidpathsarray[$item]}")"
+ echo -e "path: ${vidpathsarray[$item]}"
+ echo -e "link: ${vidlinksarray[$item]}"
+ echo -e "code: ${vidlinkcodeis}"
+ else
+ vidlinksarray[item]=''
+ fi
+ fi
+
+ # TELEGRAM SEND/UPLOAD VIDEO
+ if [ ! "${only}" == "--onlywp" ]; then
+ videofullpath=${vidpathsarray[$item]}
+ vidcompressed=${videofullpath//".mp4"/"-compressed.mp4"}
+ if [ -n "$(find "${videofullpath}" -prune -size +51380224c)" ]; then
+ duration=$(ffprobe -i "${videofullpath}" \
+ -show_entries format=duration -v quiet -of csv="p=0" | cut -d'.' -f 1)
+ if ffmpeg -i "${videofullpath}" \
+ -c:v libx264 -b:v "$((49*8*1000/duration))k" \
+ -vf "scale=960:540,fps=25,format=yuv420p" \
+ -preset veryslow "${vidcompressed}" -y -loglevel quiet -stats; then
+ videofullpath=${vidcompressed}
+ else
+ execerror "ffmpeg convert ${videofullpath} to ${vidcompressed}"
+ fi
+ fi
+ videobasename=$(basename "${videofullpath}")
+ videobasename=${videobasename//".mp4"/""}
+ response=$(curl -s \
+ -F "chat_id=${telegramchatid}" \
+ -F "video=@${videofullpath}" \
+ -F "caption=${videobasename}" \
+ "${telegramapiurl}/sendVideo")
+ if curl -s -F "chat_id=${telegramchatid}" \
+ -F "message_id=$(echo "${response}" | jq -r '.result.message_id')" \
+ "${telegramapiurl}/deleteMessage"; then
+ vidtgidsarray+=("$(echo "${response}" | jq -r '.result.video.file_id')")
+ vidtgcpsarray+=("$(echo "${response}" | jq -r '.result.caption')")
+ addtologs "sent ${videofullpath} to ${vidtgidsarray[$item]} Telegram file ID"
+ else
+ execerror "sent ${videofullpath} to ${telegramchatid} Telegram Chat ID"
+ fi
+ if [ -e "${vidcompressed}" ]; then
+ rm "${vidcompressed}"
+ fi
+ fi
done
-### TELEGRAM SEND MEDIAGROUP
-if [ ! "$only" == "--onlywp" ];then
- response=$(curl -s -F chat_id=$telegramchatid \
- -F media='[
- {"type":"photo","media":"'${tgpreviewlink}'","caption":"period: '${viddate}'\nsource: '${tgpreviewtext}'\nstream: '${youtubelink}'"},
- {"type":"video","media":"'${vidtgidsarray[0]}'"},
- {"type":"video","media":"'${vidtgidsarray[1]}'"},
- {"type":"video","media":"'${vidtgidsarray[2]}'"},
- {"type":"video","media":"'${vidtgidsarray[3]}'"},
- {"type":"video","media":"'${vidtgidsarray[4]}'"},
- {"type":"video","media":"'${vidtgidsarray[5]}'"}]' \
- -H "Content-Type:multipart/form-data" \
- $telegramapiurl/sendMediaGroup)
+
+# TELEGRAM SEND MEDIAGROUP
+if [ ! "${only}" == "--onlywp" ]; then
+ response=$(curl -s -F "chat_id=${telegramchatid}" \
+ -F media='[
+ {"type":"photo","media":"'"${tgpreviewlink}"'",
+ "caption":"period: '"${viddate}"'\nsource: '"${tgpreviewtext}"'\nstream: '"${youtubelink}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[0]}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[1]}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[2]}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[3]}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[4]}"'"},
+ {"type":"video","media":"'"${vidtgidsarray[5]}"'"}]' \
+ -H "Content-Type:multipart/form-data" \
+ "${telegramapiurl}/sendMediaGroup")
fi
-### WORDPRESS UPDATE PAGE
-if [ ! "$only" == "--onlytg" ];then
- setconfig
- getconfig
- xml=$(cat ./${wptemplateis})
- xml=${xml//wpeditpageid/${wpeditpageid}}
- xml=${xml//wpxmlrpcuser/${wpxmlrpcuser}}
- xml=${xml//wpxmlrpcpass/${wpxmlrpcpass}}
+# WORDPRESS UPDATE PAGE
+if [ ! "${only}" == "--onlytg" ]; then
+ setconfig
+ getconfig
+ xml=$(cat "./${wptemplateis}")
- xml=${xml//youtubelink/${youtubelink}}
+ xml=${xml//wpeditpageid/${wpeditpageid}}
+ xml=${xml//wpxmlrpcuser/${wpxmlrpcuser}}
+ xml=${xml//wpxmlrpcpass/${wpxmlrpcpass}}
- xml=${xml//"currentdp01[0]"/${currentdp01[0]}}
- xml=${xml//"currentdp01[1]"/${currentdp01[1]}}
- xml=${xml//"currentdp02[0]"/${currentdp02[0]}}
- xml=${xml//"currentdp02[1]"/${currentdp02[1]}}
- xml=${xml//"currentdp04[0]"/${currentdp04[0]}}
- xml=${xml//"currentdp04[1]"/${currentdp04[1]}}
- xml=${xml//"currentdp05[0]"/${currentdp05[0]}}
- xml=${xml//"currentdp05[1]"/${currentdp05[1]}}
- xml=${xml//"currentdp11[0]"/${currentdp11[0]}}
- xml=${xml//"currentdp11[1]"/${currentdp11[1]}}
- xml=${xml//"currentdp12[0]"/${currentdp12[0]}}
- xml=${xml//"currentdp12[1]"/${currentdp12[1]}}
+ xml=${xml//youtubelink/${youtubelink}}
- xml=${xml//"currentwp01[0]"/${currentwp01[0]}}
- xml=${xml//"currentwp01[1]"/${currentwp01[1]}}
- xml=${xml//"currentwp02[0]"/${currentwp02[0]}}
- xml=${xml//"currentwp02[1]"/${currentwp02[1]}}
- xml=${xml//"currentwp04[0]"/${currentwp04[0]}}
- xml=${xml//"currentwp04[1]"/${currentwp04[1]}}
- xml=${xml//"currentwp05[0]"/${currentwp05[0]}}
- xml=${xml//"currentwp05[1]"/${currentwp05[1]}}
- xml=${xml//"currentwp11[0]"/${currentwp11[0]}}
- xml=${xml//"currentwp11[1]"/${currentwp11[1]}}
- xml=${xml//"currentwp12[0]"/${currentwp12[0]}}
- xml=${xml//"currentwp12[1]"/${currentwp12[1]}}
+ xml=${xml//"currentdp01[0]"/${currentdp01[0]}}
+ xml=${xml//"currentdp01[1]"/${currentdp01[1]}}
+ xml=${xml//"currentdp02[0]"/${currentdp02[0]}}
+ xml=${xml//"currentdp02[1]"/${currentdp02[1]}}
+ xml=${xml//"currentdp04[0]"/${currentdp04[0]}}
+ xml=${xml//"currentdp04[1]"/${currentdp04[1]}}
+ xml=${xml//"currentdp05[0]"/${currentdp05[0]}}
+ xml=${xml//"currentdp05[1]"/${currentdp05[1]}}
+ xml=${xml//"currentdp11[0]"/${currentdp11[0]}}
+ xml=${xml//"currentdp11[1]"/${currentdp11[1]}}
+ xml=${xml//"currentdp12[0]"/${currentdp12[0]}}
+ xml=${xml//"currentdp12[1]"/${currentdp12[1]}}
- xml=${xml//"currentmp01[0]"/${currentmp01[0]}}
- xml=${xml//"currentmp01[1]"/${currentmp01[1]}}
- xml=${xml//"currentmp02[0]"/${currentmp02[0]}}
- xml=${xml//"currentmp02[1]"/${currentmp02[1]}}
- xml=${xml//"currentmp04[0]"/${currentmp04[0]}}
- xml=${xml//"currentmp04[1]"/${currentmp04[1]}}
- xml=${xml//"currentmp05[0]"/${currentmp05[0]}}
- xml=${xml//"currentmp05[1]"/${currentmp05[1]}}
- xml=${xml//"currentmp11[0]"/${currentmp11[0]}}
- xml=${xml//"currentmp11[1]"/${currentmp11[1]}}
- xml=${xml//"currentmp12[0]"/${currentmp12[0]}}
- xml=${xml//"currentmp12[1]"/${currentmp12[1]}}
+ xml=${xml//"currentwp01[0]"/${currentwp01[0]}}
+ xml=${xml//"currentwp01[1]"/${currentwp01[1]}}
+ xml=${xml//"currentwp02[0]"/${currentwp02[0]}}
+ xml=${xml//"currentwp02[1]"/${currentwp02[1]}}
+ xml=${xml//"currentwp04[0]"/${currentwp04[0]}}
+ xml=${xml//"currentwp04[1]"/${currentwp04[1]}}
+ xml=${xml//"currentwp05[0]"/${currentwp05[0]}}
+ xml=${xml//"currentwp05[1]"/${currentwp05[1]}}
+ xml=${xml//"currentwp11[0]"/${currentwp11[0]}}
+ xml=${xml//"currentwp11[1]"/${currentwp11[1]}}
+ xml=${xml//"currentwp12[0]"/${currentwp12[0]}}
+ xml=${xml//"currentwp12[1]"/${currentwp12[1]}}
- xml=${xml//"currentyp01[0]"/${currentyp01[0]}}
- xml=${xml//"currentyp01[1]"/${currentyp01[1]}}
- xml=${xml//"currentyp02[0]"/${currentyp02[0]}}
- xml=${xml//"currentyp02[1]"/${currentyp02[1]}}
- xml=${xml//"currentyp04[0]"/${currentyp04[0]}}
- xml=${xml//"currentyp04[1]"/${currentyp04[1]}}
- xml=${xml//"currentyp05[0]"/${currentyp05[0]}}
- xml=${xml//"currentyp05[1]"/${currentyp05[1]}}
- xml=${xml//"currentyp11[0]"/${currentyp11[0]}}
- xml=${xml//"currentyp11[1]"/${currentyp11[1]}}
- xml=${xml//"currentyp12[0]"/${currentyp12[0]}}
- xml=${xml//"currentyp12[1]"/${currentyp12[1]}}
+ xml=${xml//"currentmp01[0]"/${currentmp01[0]}}
+ xml=${xml//"currentmp01[1]"/${currentmp01[1]}}
+ xml=${xml//"currentmp02[0]"/${currentmp02[0]}}
+ xml=${xml//"currentmp02[1]"/${currentmp02[1]}}
+ xml=${xml//"currentmp04[0]"/${currentmp04[0]}}
+ xml=${xml//"currentmp04[1]"/${currentmp04[1]}}
+ xml=${xml//"currentmp05[0]"/${currentmp05[0]}}
+ xml=${xml//"currentmp05[1]"/${currentmp05[1]}}
+ xml=${xml//"currentmp11[0]"/${currentmp11[0]}}
+ xml=${xml//"currentmp11[1]"/${currentmp11[1]}}
+ xml=${xml//"currentmp12[0]"/${currentmp12[0]}}
+ xml=${xml//"currentmp12[1]"/${currentmp12[1]}}
- xml=${xml//wpedituserid/${wpedituserid}}
- xml=${xml//wppageauthor/${wppageauthor}}
- xml=${xml//wppagelinkis/${wppagelinkis}}
- xml=${xml//wpeditdateis/${wpeditdateis}}
+ xml=${xml//"currentyp01[0]"/${currentyp01[0]}}
+ xml=${xml//"currentyp01[1]"/${currentyp01[1]}}
+ xml=${xml//"currentyp02[0]"/${currentyp02[0]}}
+ xml=${xml//"currentyp02[1]"/${currentyp02[1]}}
+ xml=${xml//"currentyp04[0]"/${currentyp04[0]}}
+ xml=${xml//"currentyp04[1]"/${currentyp04[1]}}
+ xml=${xml//"currentyp05[0]"/${currentyp05[0]}}
+ xml=${xml//"currentyp05[1]"/${currentyp05[1]}}
+ xml=${xml//"currentyp11[0]"/${currentyp11[0]}}
+ xml=${xml//"currentyp11[1]"/${currentyp11[1]}}
+ xml=${xml//"currentyp12[0]"/${currentyp12[0]}}
+ xml=${xml//"currentyp12[1]"/${currentyp12[1]}}
- response=$(curl -d "$xml" $wpxmlrpclink)
- if echo "$response" | grep -q '1';then
- addtologs "update $(echo "$xml" | grep 'Link' | cut -d'>' -f 6 | cut -d'<' -f 1))"
- else
- echo $response | xmllint --format - > $pathroot/wp-page${wpeditpageid}-response.xml 2>/dev/null
- execerror "$pathroot/wp-page${wpeditpageid}-response.xml"
- fi
+ xml=${xml//wpedituserid/${wpedituserid}}
+ xml=${xml//wppageauthor/${wppageauthor}}
+ xml=${xml//wppagelinkis/${wppagelinkis}}
+ xml=${xml//wpeditdateis/${wpeditdateis}}
+
+ response=$(curl -d "${xml}" "${wpxmlrpclink}")
+ if echo "${response}" | grep -q '1'; then
+ addtologs "update $(grep 'Link' "${xml}" | cut -d'>' -f 6 | cut -d'<' -f 1))"
+ else
+ echo "${response}" | xmllint --format - > "${pathroot}/wp-page${wpeditpageid}-response.xml" 2>/dev/null
+ execerror "${pathroot}/wp-page${wpeditpageid}-response.xml"
+ fi
fi
-execquite
\ No newline at end of file
+execquite
diff --git a/sequences.conf b/sequences.conf
index 53b2a2b..d34966a 100644
--- a/sequences.conf
+++ b/sequences.conf
@@ -9,6 +9,7 @@ ftpuser=user
ftppass=pass
ftpaddr=192.168.254.254
ftpport=21
+ftppath=Records/cam.test.local
tmpuser=user
tmppass=pass
diff --git a/sequences.sh b/sequences.sh
index d9fb9f1..9053ce0 100644
--- a/sequences.sh
+++ b/sequences.sh
@@ -1,137 +1,291 @@
#! /bin/bash
+# DESCRIPTION:
+# Handling Hikvision PTZ-cameras sequences.
+# Additionally:
+# - get ds18b20 sensor value over SSH,
+# - saving pictures to FTP.
+# This is only a local "proof of conept" for testing and debugging.
#
-## DESCRIPTION:
-# Hikvision PTZ-camera sequences.
-# Additionally:
-# - getting temperature from ds-18b20 over SSH,
-# - saving pictures to FTP.
-# This is only a local "proof of conept" for testing and debugging.
-#
-
-#
-## DEPENDENCIES: sudo apt|yum install -y curl sshpass
-#
-
-#
-## FUNCTIONS
+# DEPENDENCIES:
+# - curl
+# - sshpass
+#
+# PARAMETERS:
+# 1: "qn" - execution without pauses
+# 2: custom configuration file path
+#
+# FUNCTIONS:
#
+#######################################
+# Print message and add to log.
+# Globals:
+# logs
+# Arguments:
+# 1: message to print and logging
+#######################################
addtologs() {
- echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a $logs
+ echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a "${logs}"
}
+
+#######################################
+# Waiting for press [ENTER].
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
execpause() {
- read -p "Press [ENTER] to continue... "
+ read -r -p "Press [ENTER] to continue... "
}
+
+#######################################
+# Exit procedure.
+# Globals:
+# show
+# Arguments:
+# None
+#######################################
execquite() {
- addtologs "execution time is $(($(date +%s)-$time)) seconds, exit"
- if [ "${show}" != "qn" ];then
- execpause
- fi
- exit
+ addtologs "execution time is $(($(date +%s)-time)) seconds, exit"
+ if [ "${show}" != "qn" ]; then
+ execpause
+ fi
+ exit
}
+
+#######################################
+# Error exit procedure with Telegram notification.
+# Globals:
+# telegramapiurl
+# telegramchatid
+# Arguments:
+# 1: message to print and logging
+#######################################
execerror() {
- addtologs "error: $1"
- curl -s -X POST $telegramapiurl/sendMessage -d chat_id=$telegramchatid -d text="$(basename -s .sh $0) error: $1" >> /dev/null 2>&1
- execquite
+ addtologs "error: $1"
+ curl -s -X POST "${telegramapiurl}/sendMessage" \
+ -d "chat_id=${telegramchatid}" \
+ -d "text=$(basename -s .sh "$0") error: $1" \
+ >> /dev/null 2>&1
+ execquite
}
+
+#######################################
+# Parsing config file and creating global vars.
+# Globals:
+# None
+# Arguments:
+# None
+#######################################
getconfig() {
- logs=$(cat $conf | grep "logs=" | cut -d= -f2)
- camuser=$(cat $conf | grep "camuser=" | cut -d= -f2)
- campass=$(cat $conf | grep "campass=" | cut -d= -f2)
- camaddr=$(cat $conf | grep "camaddr=" | cut -d= -f2)
- camport=$(cat $conf | grep "camport=" | cut -d= -f2)
- ftpuser=$(cat $conf | grep "ftpuser=" | cut -d= -f2)
- ftppass=$(cat $conf | grep "ftppass=" | cut -d= -f2)
- ftpaddr=$(cat $conf | grep "ftpaddr=" | cut -d= -f2)
- ftpport=$(cat $conf | grep "ftpport=" | cut -d= -f2)
- tmpuser=$(cat $conf | grep "tmpuser=" | cut -d= -f2)
- tmppass=$(cat $conf | grep "tmppass=" | cut -d= -f2)
- tmpaddr=$(cat $conf | grep "tmpaddr=" | cut -d= -f2)
- tmpport=$(cat $conf | grep "tmpport=" | cut -d= -f2)
- tmpnode=$(cat $conf | grep "tmpnode=" | cut -d= -f2)
- telegramapiurl=$(cat $conf | grep "telegramapiurl=" | cut -d= -f2)
- telegramchatid=$(cat $conf | grep "telegramchatid=" | cut -d= -f2)
+ logs=$(grep "logs=" "${conf}" | cut -d= -f2)
+ camuser=$(grep "camuser=" "${conf}" | cut -d= -f2)
+ campass=$(grep "campass=" "${conf}" | cut -d= -f2)
+ camaddr=$(grep "camaddr=" "${conf}" | cut -d= -f2)
+ camport=$(grep "camport=" "${conf}" | cut -d= -f2)
+ ftpuser=$(grep "ftpuser=" "${conf}" | cut -d= -f2)
+ ftppass=$(grep "ftppass=" "${conf}" | cut -d= -f2)
+ ftpaddr=$(grep "ftpaddr=" "${conf}" | cut -d= -f2)
+ ftpport=$(grep "ftpport=" "${conf}" | cut -d= -f2)
+ ftppath=$(grep "ftppath=" "${conf}" | cut -d= -f2)
+ tmpuser=$(grep "tmpuser=" "${conf}" | cut -d= -f2)
+ tmppass=$(grep "tmppass=" "${conf}" | cut -d= -f2)
+ tmpaddr=$(grep "tmpaddr=" "${conf}" | cut -d= -f2)
+ tmpport=$(grep "tmpport=" "${conf}" | cut -d= -f2)
+ tmpnode=$(grep "tmpnode=" "${conf}" | cut -d= -f2)
+ telegramapiurl=$(grep "telegramapiurl=" "${conf}" | cut -d= -f2)
+ telegramchatid=$(grep "telegramchatid=" "${conf}" | cut -d= -f2)
}
+
+#######################################
+# Get ds18b20 sensor value over SSH.
+# Globals:
+# tmpaddr
+# tmpport
+# tmpuser
+# tmppass
+# tmpnode
+# Arguments:
+# None
+# return:
+# temperature in Celsius
+#######################################
getairtmp() {
- local temp=$( \
- sshpass -p $tmppass ssh $tmpuser@$tmpaddr -p $tmpport -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
- "cat /sys/bus/w1/devices/$tmpnode/temperature" \
- ) && temp=$(($temp / 1000))
- if [ ! -z "${temp}" ]; then
- addtologs "air temperature now is $temp'C" > /dev/null
- echo $temp
- else
- execerror "air temperature now is $temp'C"
- fi
+ temp=$(sshpass -p "${tmppass}" \
+ ssh "${tmpuser}@${tmpaddr}" -p "${tmpport}" \
+ -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
+ "cat /sys/bus/w1/devices/${tmpnode}/temperature" \
+ ) && temp=$((temp / 1000))
+ if [ -n "${temp}" ]; then
+ addtologs "getairtmp: air temperature now is ${temp}'C" > /dev/null
+ echo "${temp}"
+ else
+ execerror "getairtmp: air temperature now is ${temp}'C"
+ fi
}
+
+#######################################
+# Get static picture from camera and upload to FTP.
+# Globals:
+# camaddr
+# camport
+# camuser
+# campass
+# ftpaddr
+# ftpport
+# ftppath
+# ftpuser
+# ftppass
+# Arguments:
+# 1: filename prefix
+#######################################
getcamimg() {
- local name=$1
- local file="$ftpaddr:$ftpport/Records/cam-street.home.local/$(date +"%Y")/$(date +"%m")/$(date +"%V")/$(date +"%d")/${name}_$(date +"%Y.%m.%d_%H-%M-%S").jpeg"
- url='/Streaming/channels/101/picture?snapShotImageType=JPEG&videoResolutionWidth=1920&videoResolutionHeight=1080'
- curl -vs "http://$camuser:$campass@$camaddr:$camport/$url" -o tmp \
- && curl -T tmp "ftp://$ftpuser:$ftppass@$file" --ftp-create-dirs \
- && rm tmp && addtologs "save photo to ftp://$file" || execerror "save photo to ftp://$file"
+ local name
+ name=$1
+ path="${ftppath}/$(date +"%Y")/$(date +"%m")/$(date +"%V")/$(date +"%d")"
+ file="${ftpaddr}:${ftpport}/${path}/${name}_$(date +"%Y.%m.%d_%H-%M-%S").jpeg"
+ url='Streaming/channels/101/picture?snapShotImageType=JPEG&videoResolutionWidth=1920&videoResolutionHeight=1080'
+ if curl -vs "http://$camuser:$campass@$camaddr:$camport/$url" -o tmp \
+ && curl -T tmp "ftp://$ftpuser:$ftppass@$file" --ftp-create-dirs; then
+ addtologs "getcamimg: save photo to ftp://${file}"
+ rm tmp
+ else
+ execerror "getcamimg: save photo to ftp://${file}"
+ fi
}
+
+#######################################
+# Set message as video overlay text.
+# Globals:
+# camaddr
+# camport
+# camuser
+# campass
+# Arguments:
+# 1: overlay text content
+#######################################
setcamtxt() {
- local message=$1
- url='/Video/inputs/channels/101/overlays/text'
- xml='1true00'"${message}"''
- curl -d "$xml" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" && addtologs "text on video is $message" && sleep 5 || execerror "text on video is $message"
+ local message=$1
+ url='ISAPI/System/Video/inputs/channels/101/overlays/text'
+ xml='
+
+ 1
+ true
+ 00
+ '"${message}"'
+
+ '
+ if curl -d "${xml}" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" \
+ | grep -q 'OK'; then
+ addtologs "setcamtxt: ${message}"
+ sleep 5
+ else
+ execerror "setcamtxt: ${message}"
+ fi
}
+
+#######################################
+# Set camera moving to absolute position.
+# Globals:
+# camaddr
+# camport
+# camuser
+# campass
+# Arguments:
+# 1: horisontal camera position from 0 to 3600
+# 2: vertical camera position from -900 to 2700
+# 3: zoom camera position from 0 to 1000
+# 4: time to wait
+# 5: message to print and logging
+#######################################
setcampos() {
- local x=$1
- local y=$2
- local z=$3
- local t=$4
- local message=$5
- url='/ISAPI/PTZCtrl/channels/101/absolute'
- xml=''"${y}"''"${x}"''"${z}"''
- curl -d "$xml" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" && addtologs "$message" && sleep $t || execerror "$message"
+ local x=$1
+ local y=$2
+ local z=$3
+ local t=$4
+ local message=$5
+ url='ISAPI/PTZCtrl/channels/101/absolute'
+ xml='
+
+ '"${y}"'
+ '"${x}"'
+ '"${z}"'
+
+ '
+ if curl -d "${xml}" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" \
+ | grep -q 'OK'; then
+ addtologs "setcampos: ${message}"
+ sleep "${t}"
+ else
+ execerror "setcampos: ${message}"
+ fi
}
+
+#######################################
+# Set camera moving to direction.
+# Globals:
+# camaddr
+# camport
+# camuser
+# campass
+# Arguments:
+# 1: acceleration of horizontal camera movement from -100 to 100
+# 2: acceleration of vertical camera movement from -100 to 100
+# 3: acceleration of zoom camera movement from -100 to 100
+# 4: time to wait
+# 5: message to print and logging
+#######################################
setcammov() {
- local x=$1
- local y=$2
- local z=$3
- local t=$4
- local message=$5
- url='/ISAPI/PTZCtrl/channels/101/continuous'
- xml=''"${x}"''"${y}"''"${z}"''
- curl -d "$xml" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" && addtologs "$message" && sleep $t || execerror "$message"
+ local x=$1
+ local y=$2
+ local z=$3
+ local t=$4
+ local message=$5
+ url='ISAPI/PTZCtrl/channels/101/continuous'
+ xml='
+ '"${x}"'
+ '"${y}"'
+ '"${z}"'
+ '
+ if curl -d "${xml}" -X PUT "http://$camuser:$campass@$camaddr:$camport/$url" \
+ | grep -q 'OK'; then
+ addtologs "setcammov: ${message}"
+ sleep "${t}"
+ else
+ execerror "setcammov: ${message}"
+ fi
}
#
-## PARAMETERS
+## VARIABLES:
#
-show=${1}
-conf=${2}
-if [ -z "${conf}" ] || [ "${conf}" == "-" ];then
- conf="$(dirname $(realpath "$0"))/$(basename -s .sh $0).conf"
+show=$1
+conf=$2
+if [ -z "${conf}" ] || [ "${conf}" == "-" ]; then
+ conf="$(dirname "$(realpath "$0")")/$(basename -s .sh "$0").conf"
fi
-#
-## VARIABLES
-#
-
time=$(date +%s)
-cd "$(dirname "$(realpath "$0")")"
-if [ ! -e ${conf} ];then
- execerror "Not found config file: ${conf}"
+cd "$(dirname "$(realpath "$0")")" || execerror
+if [ ! -e "${conf}" ]; then
+ execerror "Not found config file: ${conf}"
else
- getconfig
+ getconfig
fi
if [ -z "${logs}" ];then
- logs=/dev/null
-elif [ ! -e ${logs} ];then
- touch ${logs}
+ logs=/dev/null
+elif [ ! -e "${logs}" ];then
+ touch "${logs}"
fi
if ! command -v curl &> /dev/null || ! command -v sshpass &> /dev/null; then
- execerror "Not found dependencies"
+ execerror "Not found dependencies"
fi
#
-## RUN
+# MAIN:
#
setcamtxt "$(getairtmp)'C"
@@ -162,12 +316,13 @@ sleep 4m
setcammov 0 -44 33 1.50s '08 >> 09 Точка - Стадион 8x'
setcampos 2860 -170 80 5.00s '08 >| 09 Точка - Стадион 8x'
sleep 1m
+setcammov 0 -99 0 7.50s '09 >> 10 Точка - Въезд во двор 8x'
setcampos 2805 200 80 5.00s '09 >| 10 Точка - Въезд во двор 8x'
sleep 5m
setcammov -88 99 0 5.00s '10 >> 11 Точка - Бассейн 8x'
setcammov -99 88 0 2.00s '10 >> 11 Точка - Бассейн 8x'
setcammov -44 99 0 4.25s '10 >> 11 Точка - Бассейн 8x'
-setcampos 2510 -100 80 5.00s '10 >| 11 Точка - Бассейн 8x'
+setcampos 2510 -20 80 5.00s '10 >| 11 Точка - Бассейн 8x'
sleep 1m
setcammov -88 99 33 2.50s '11 >> 12 Точка - Общежитие дальнее 16x'
setcampos 2415 -200 160 5.00s '11 >| 12 Точка - Общежитие дальнее 16x'
@@ -176,7 +331,7 @@ setcammov 66 0 0 22.5s '12 >> 13 Точка - Общ
setcampos 2640 -200 160 5.00s '12 >| 13 Точка - Общежите ближнее 16x'
sleep 1m
setcammov 66 0 0 90.5s '13 >> 14 Точка - Крыша магазина 4x'
-setcammov 99 0 -33 3.25s '13 >> 14 Точка - Крыша магазина 4x'
+setcammov 99 0 -44 3.25s '13 >> 14 Точка - Крыша магазина 4x'
setcampos 335 -200 40 5.00s '13 >| 14 Точка - Крыша магазина 4x'
sleep 1m
setcamtxt '' && getcamimg 'point-11' && setcamtxt "$(getairtmp)'C"