10 Commits
v0.2 ... master

Author SHA1 Message Date
18f503c3e0 add --buffer-size=192000 2021-02-17 12:52:12 +00:00
ac0f0a6fbb README.md 2021-02-17 11:47:16 +00:00
bfbb10ed52 docu 2021-02-06 12:00:18 +00:00
88519bc4ab docu 2021-02-06 11:57:39 +00:00
d910a3d93f arecord parameter 2021-02-06 09:41:20 +00:00
197b2890e8 -max-file-time + filename 2021-02-04 20:41:07 +00:00
48c84601c5 . 2021-02-03 19:08:42 +00:00
a39c5ffb46 ... 2021-02-02 15:45:11 +00:00
769bb239e0 .. 2021-02-01 17:24:10 +00:00
cc9de03d26 source beautifying 2021-02-01 17:12:39 +00:00
2 changed files with 126 additions and 65 deletions

View File

@@ -14,7 +14,7 @@
* Einrichtung ALSA
* über welches Device kann das Mikro angesprochen werden? (hier: plughw:1,0)
#### Entfernter Server (server)
#### Voraussetzungen entfernter Server (server)
* sshd
* apt-get install rsync
@@ -36,6 +36,7 @@ Auf dem Raspi folgendes ausführen:
```
git clone https://git.hs42.de/hs/sumsel.git
cd /sumsel
chmod a+x sumsel.sh
cp sumsel.conf.dist sumsel.conf
```
Anschliessend Variablen in ./sumsel.conf setzen:
@@ -49,7 +50,7 @@ Anschliessend Variablen in ./sumsel.conf setzen:
| UPL_DIR | optional | Ordner in dem die MP3 Dateien abgelegt werden | ./upqueue |
| UPL_SUFFIX | optional | Ordner in dem die MP3 Dateien abgelegt werden | sumsi |
## Betrieb
## Skripte
| Kommando | Aktion |
| ------------ | ------------------------ |
@@ -57,6 +58,33 @@ Anschliessend Variablen in ./sumsel.conf setzen:
| sumsel.sh -r | Aufnehmen |
| sumsel.sh -c | Konvertieren + Hochladen |
## Betrieb
Im Dauerbetrieb laufen zwei Jobs:
| Jobtyp | Bezeichnung | Kommando | Betriebsart |
| ------- |------------------------- | ------------------------------- | -------------- |
| record | Aufnahme der WAV Dateien | ./sumsel.sh -r -C ./sumsel.conf | endlos |
| convert | Konvertierung + Upload | ./sumsel.sh -c -C ./sumsel.conf | alle 5 Minuten |
Die Jobs können über cron gestartet werden. Das Skript setzt einen Lock und sorgt dafür, dass von
jeden Jobtyp nur eine Instanz laufen kann. Stellt das Script fest, dass bereits eine Instanz läuft,
wird die aktuelle Instanz mit der Meldung "LOCK error" beendet.
```
hs@raspi4:~/dev/stage/sumsel $ ./sumsel.sh -c -C ./sumsel.conf
LOCK error
```
Beispiel für crontab:
```
*/5 * * * * <path>/sumsel.sh -r -C <path>/sumsel.conf >> <path>/sumsel_r.log
1,10,11,21,31,41,51 * * * * <path>/sumsel.sh -c -C <path>/sumsel.conf >> <path>/sumsel_c.log
```
### GIT commands
* git status
* git add ...

127
sumsel.sh
View File

@@ -1,5 +1,7 @@
#!/bin/bash
VERSION="0.3"
LOCK_DIR=/var/lock
SIM_EXAMPLE_FILE=./res/test.wav
@@ -25,17 +27,29 @@ UPL_SUFFIX=sumsi
usage() {
echo "Usage: $0 [-h] (-s|-r|-t) [-C <configfile>]" 1>&2;
echo -e '\t-h Usage'
echo -e '\t-s Simulation'
echo -e '\t-r Aufnahme'
echo -e '\t-c Konvertierung'
echo -e '\t-C <configfile> ssss'
echo -e '\t-h Usage' 1>&2;
echo -e '\t-v Version' 1>&2;
echo -e '' 1>&2;
echo -e '\t-s Simulation' 1>&2;
echo -e '\t-r Aufnahme' 1>&2;
echo -e '\t-c Konvertierung' 1>&2;
echo -e '' 1>&2;
echo -e '\t-C <configfile> Konfiguration laden' 1>&2;
echo "" 1>&2;
echo "Doku: https://git.hs42.de/hs/sumsel" 1>&2;
exit 1;
}
while getopts ":hsrcC:" options;
mode=''
lock_mode=''
while getopts ":hsrcC:v" options;
do
case "${options}" in
v)
echo "$0 version ${VERSION}" 1>&2;
exit 1
;;
h)
usage
;;
@@ -47,7 +61,7 @@ do
if [ -f ${config} ]; then
. ${config}
else
echo "file not found: ${config}"
echo "config file not found: ${config}"
exit
fi
;;
@@ -58,23 +72,17 @@ do
esac
done
check_var_exists() {
local var_name=$1
if [[ ! -v ${var_name} ]]; then
echo "${var_name} not set"
exit 1
fi
}
set_lockfile() {
local BASENAME=$(basename "$0")
local LOCK_FILE="${LOCK_DIR}/${BASENAME}"
local RANDOM_FILE=$(mktemp --tmpdir=${LOCK_DIR})
echo $$ > ${RANDOM_FILE}
mv -n ${RANDOM_FILE} ${LOCK_FILE}
local basename=$(basename "$0")
if [ ! -z ${1+x} ]; then
basename="${basename}_$1"
fi
local lock_file="${LOCK_DIR}/${basename}"
local random_file=$(mktemp --tmpdir=${LOCK_DIR})
echo $$ > ${random_file}
mv -n ${random_file} ${lock_file}
if [ -e ${RANDOM_FILE} ] ; then
if [ -e ${random_file} ]; then
false
else
true
@@ -82,10 +90,32 @@ set_lockfile() {
}
del_lockfile() {
local BASENAME=$(basename "$0")
local LOCK_FILE="${LOCK_DIR}/${BASENAME}"
local basename=$(basename "$0")
if [ ! -z ${1+x} ]; then
basename="${basename}_$1"
fi
local lock_file="${LOCK_DIR}/${basename}"
rm ${LOCK_FILE}
rm ${lock_file}
}
cleanup() {
del_lockfile ${lock_mode}
exit 1
}
check_var_exists() {
local var_name=$1
if [[ ! -v ${var_name} ]]; then
echo "${var_name} not set"
cleanup
fi
}
ctrl_c() {
echo "** Trapped CTRL-C" 1>&2;
cleanup
}
simulate() {
@@ -93,18 +123,19 @@ simulate() {
check_var_exists "REC_PREFIX"
check_var_exists "SIM_EXAMPLE_FILE"
local COUNTER=0
local counter=0
local dst_fn=""
mkdir -p ${REC_DIR}
echo "Press [CTRL+C] to stop.."
echo "Press [CTRL+C] to stop.." 1>&2;
trap ctrl_c INT
while :
do
sleep 1
COUNTER=$[$COUNTER +1]
dst_fn="${REC_DIR}/${REC_PREFIX}-${COUNTER}.wav"
sleep ${REC_FILE_TIME}
counter=$[$counter +1]
dst_fn="${REC_DIR}/${REC_PREFIX}-${counter}.wav"
cp ${SIM_EXAMPLE_FILE} ${dst_fn}
done
exit 0
}
record() {
@@ -114,8 +145,8 @@ record() {
check_var_exists "REC_DIR"
mkdir -p ${REC_DIR}
arecord --format=cd --device=${REC_DEVICE} --max-file-time ${REC_FILE_TIME} ${REC_DIR}/${REC_PREFIX}.wav
exit 0
trap ctrl_c INT
arecord --format=cd --device=${REC_DEVICE} --buffer-size=192000 --max-file-time=${REC_FILE_TIME} --use-strftime ${REC_DIR}/${REC_PREFIX}%Y%m%d%H%M%v.wav
}
convert() {
@@ -124,9 +155,6 @@ convert() {
check_var_exists "UPL_SUFFIX"
check_var_exists "REMOTE_DIR"
if set_lockfile;
then
mkdir -p ${REC_DIR}
mkdir -p ${UPL_DIR}
@@ -143,27 +171,32 @@ convert() {
done
rsync -avzh --remove-source-files ${UPL_DIR} ${REMOTE_DIR}
del_lockfile
exit 0
else
echo "LOCK error"
exit 1
fi
}
case ${mode} in
s) #Simulation
simulate
exit
lock_mode=record
func=simulate
;;
r) #Aufnahme
record
lock_mode=record
func=record
;;
c) #Konvertierung
convert
lock_mode=convert
func=convert
;;
*)
echo "mode not set"
echo "mode not set" 1>&2;
exit 1
;;
esac
if set_lockfile ${lock_mode}; then
${func}
del_lockfile ${lock_mode}
else
echo "LOCK error" 1>&2;
exit 1
fi