-#!/bin/sh
+#!/bin/bash
# Simple sleep monitor (Harvie 2012)
#
# You probably have soundcard with one output and input
out=/tmp/sleeplog-"$(date +%F_%T)".txt
graphout="${out%%.*}.png"
+
+killall speaker-test &>/dev/null
speaker-test -t sine &>/dev/null &
-pid_test=$!
+
+touch "$out"
+bash ./sleepstats.sh "$out" &>/dev/null &
+
tresh=10
lastdate="$(date +%s)"
-laststate=0
-history='';
-historymax=120;
-historylen='10 30 120'
screen=false
graph=false
+export LC_ALL=C
+
+#trap 'kill -9 $(jobs -p);' SIGINT
+
while getopts "sg" OPT; do
test "$OPT" == 's' && screen=true;
test "$OPT" == 'g' && graph=true;
$state && statenum=1 || statenum=0;
$state && statename='MOTION!' || statename='Nothing';
- echo -ne "$time\t$date $(date '+%F %T') $statenum"
-
- #History
- after=$(( $date - $lastdate))
- test $historymax -gt 0 && {
- history=$(echo -n "$(yes | tr '\ny' $laststate | head -c $after)$history" | head -c $historymax)
- for len in $historylen; do
- on="$(echo -n ${history::$len} | tr -d 0 | wc -c)"
- on="$(echo "scale=2; $on/$len" | bc)"
- LC_ALL=C printf " %.2f" "$on"
- done
- }
+ printf "%.2f\t %s %s %d" "$time" "$date" "$(date '+%F %T')" "$statenum"
#Debug
- echo -e "\t($statename $level After $after secs)";
+ after=$(( $date - $lastdate))
+ printf " (%s %3d After %4d secs)\n" "$statename" "$level" "$after";
#Fun with values
$state && {
#Prepare invariants for next round
lastdate="$date";
- laststate="$statenum";
done | tee "$out"
-kill $pid_test; sleep 0.2
+kill $(jobs -p); sleep 0.2
echo
echo "Your log: $out"
$graph && {