do floating average of people present. OMG in bash? how dare you?
parent
668081a828
commit
4f6ee9d2e2
|
@ -1,27 +1,77 @@
|
|||
#!/bin/bash
|
||||
#update peoplecounter number in realtime
|
||||
#but: this is too intrusive. should only update when the count of
|
||||
@ people has not changed for a certain time
|
||||
# people has not changed for a certain time
|
||||
if [ "$(basename $0)" = "peoplecounter-realtime-dev.sh" ]
|
||||
then # switch between dev and prod config dynamically by script name
|
||||
DEV="-dev"
|
||||
else
|
||||
DEV=""
|
||||
fi
|
||||
STATSFILE="/run/peoplecounter$DEV"
|
||||
SAMPLES=12 # how many records to keep in file
|
||||
INTERVAL=10 # how long to wait between polls
|
||||
MAXFILE="/run/peoplecountermax$DEV"
|
||||
PRESENCY="/run/presency$DEV" # value shown on website
|
||||
# /run/peoplecounter lists all recent reads, newest at end
|
||||
# let's have some management functions instead of a database
|
||||
if [ ! -f "$STATSFILE" ]
|
||||
then
|
||||
touch "$STATSFILE"
|
||||
fi
|
||||
function getmaxpeople() {
|
||||
awk 'BEGIN {v=0}
|
||||
$1 > v {v=$1}
|
||||
END {print v}' "$STATSFILE"
|
||||
}
|
||||
function getaveragepeople() {
|
||||
awk 'BEGIN {t=n=0}
|
||||
{t+=$1
|
||||
n++}
|
||||
END {print int(t/n+0.4)}' "$STATSFILE"
|
||||
}
|
||||
function getlastpeople() {
|
||||
awk 'BEGIN{v=0}
|
||||
{v=$1}
|
||||
END{print v}' "$STATSFILE"
|
||||
}
|
||||
function addcount() {
|
||||
awk -v new="$1" -v samples="$SAMPLES" -v stats="$STATSFILE" '
|
||||
BEGIN{n=0}
|
||||
{p[++n]=$1}
|
||||
END{
|
||||
p[++n]=new
|
||||
n++ # yes you can do off by 1 errors in awk
|
||||
start=n-samples
|
||||
if(start<1) {start=1}
|
||||
for(i=start;i<n;i++) {
|
||||
print p[i] > stats # welcome to awk world
|
||||
}
|
||||
}
|
||||
' "$STATSFILE"
|
||||
}
|
||||
PEOPLECOUNTERIP=$(cat $(dirname "$0")"/peoplecounterip.txt")
|
||||
state="online"
|
||||
while true
|
||||
do
|
||||
# scrape new value
|
||||
p="$(
|
||||
wget -qO - "http://$PEOPLECOUNTERIP/output.cgi?t=$(date +%s)" |
|
||||
sed 's/.*Occupancy://'|
|
||||
awk '{print $2}')"
|
||||
if [ "$p" != "" ]
|
||||
if [ "$p" != "" ] # oh we got something
|
||||
then
|
||||
oldp="$(cat /run/peoplecounter)"
|
||||
echo "$p" > /run/peoplecounter
|
||||
oldp="$(getlastpeople)"
|
||||
addcount "$p"
|
||||
if [ "$p" != "$oldp" ]
|
||||
then
|
||||
logger $(basename $0) changed from $oldp to $p people
|
||||
if [ "$p" -gt "$oldp" ]
|
||||
then
|
||||
echo "$p" > /run/peoplecountermax
|
||||
echo "$p" > "$MAXFILE"
|
||||
fi
|
||||
fi
|
||||
getaveragepeople > "$PRESENCY"
|
||||
if [ "$state" = "offline" ]
|
||||
then
|
||||
state="online"
|
||||
|
@ -34,5 +84,5 @@ do
|
|||
logger $(basename $0) people counter offline
|
||||
fi
|
||||
fi
|
||||
sleep 10
|
||||
sleep "$INTERVAL"
|
||||
done
|
||||
|
|
Loading…
Reference in New Issue