parent
210d979eef
commit
3e7027dd82
|
@ -0,0 +1,23 @@
|
||||||
|
Pidor is controlling the state of Level2 on the website, spaceapi and twitter
|
||||||
|
|
||||||
|
This documentation is work in progress, sorry about that.
|
||||||
|
|
||||||
|
Install
|
||||||
|
put this in /etc/inittab (see example in systemfiles/inittab)
|
||||||
|
# pidor
|
||||||
|
P0:2345:respawn:/root/pidor/scripts/lockbutton.sh
|
||||||
|
P1:2345:respawn:/root/pidor/scripts/beamerdetect.sh
|
||||||
|
P2:2345:respawn:/root/pidor/scripts/ws4beamer_status.py
|
||||||
|
P3:2345:respawn:/root/pidor/scripts/peoplecounter-realtime.sh
|
||||||
|
|
||||||
|
put the beamer IP into beamerip.txt
|
||||||
|
put the peoplecounter ip into peoplecounterip.txt
|
||||||
|
|
||||||
|
fill in the crontab
|
||||||
|
* * * * * /root/pidor/scripts/dhcp2presency.sh
|
||||||
|
* * * * * /root/pidor/scripts/upd_status.sh > /run/spacestatus.out 2>&1
|
||||||
|
|
||||||
|
needs an apache, for some silly historic reason, and for the lights commander
|
||||||
|
cd ~/pidor/www && ./intallwebsite.sh
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,34 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
BEAMERIP=$(cat $(dirname "$0")"/beamerip.txt")
|
||||||
|
function raisescreen() {
|
||||||
|
echo "Rolling projection screen up"
|
||||||
|
ssh pi@doorbuzz 'doorbuzz/projectionscreen.sh up'
|
||||||
|
}
|
||||||
|
function pingall() {
|
||||||
|
i=1
|
||||||
|
while [ $i -lt 255 ]
|
||||||
|
do
|
||||||
|
ping -c 1 10.2.113.$i -q >/dev/null &
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
wait
|
||||||
|
}
|
||||||
if [ "$1" = "off" ]
|
if [ "$1" = "off" ]
|
||||||
then
|
then
|
||||||
(
|
(
|
||||||
echo "called with parameter $1"
|
echo "called with parameter $1"
|
||||||
projip=$(arp -an|awk -F'[()]' '/00:50:41:79:d1:34/{print $2}')
|
projip="$BEAMERIP"
|
||||||
if [ "$projip" = "" ]
|
if [ "$projip" = "" ]
|
||||||
then
|
then
|
||||||
echo "no projector IP found"
|
echo "no projector IP found"
|
||||||
arp -a
|
arp -a
|
||||||
|
raisescreen
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
signalsource="$(wget -qO - 'http://'"$projip"'/tgi/return.tgi?query=info' |awk -F'[<>]' '/<info>/{print substr($3,33,2)}')"
|
signalsource="$(wget -qO - 'http://'"$projip"'/tgi/return.tgi?query=info' |awk -F'[<>]' '/<info>/{print substr($3,33,2)}')"
|
||||||
if [ "$signalsource" = "00" ] || [ "$signalsource" = "15" ] || [ "$signalsource" = "" ]
|
if [ "$signalsource" = "00" ] || [ "$signalsource" = "15" ] || [ "$signalsource" = "" ]
|
||||||
then
|
then
|
||||||
ssh pi@doorbuzz 'doorbuzz/projectionscreen.sh up'
|
raisescreen
|
||||||
echo "wget http://$projip/tgi/return.tgi?command=2a3102fd0660 #projector off"
|
echo "wget http://$projip/tgi/return.tgi?command=2a3102fd0660 #projector off"
|
||||||
wget -qO - 'http://'"$projip"'/tgi/return.tgi?command=2a3102fd0660' 2>&1
|
wget -qO - 'http://'"$projip"'/tgi/return.tgi?command=2a3102fd0660' 2>&1
|
||||||
echo $?
|
echo $?
|
||||||
|
@ -22,12 +37,20 @@ then
|
||||||
fi
|
fi
|
||||||
) | logger -t "$(basename $0) $$"
|
) | logger -t "$(basename $0) $$"
|
||||||
exit
|
exit
|
||||||
|
fi &
|
||||||
|
if [ "$1" = "off" ]
|
||||||
|
then
|
||||||
|
exit # because the if before is in background
|
||||||
fi
|
fi
|
||||||
prevstatus="unknown"
|
prevstatus="unknown"
|
||||||
while true
|
while true
|
||||||
do
|
do
|
||||||
projip=$(arp -an|awk -F'[()]' '/00:50:41:79:d1:34/{print $2}')
|
if [ $(date +%H) -eq 23 ]
|
||||||
# from the acer webpage we read that bytes 30-31 contain 00 if poer off and 01 if power on
|
then
|
||||||
|
pingall
|
||||||
|
fi
|
||||||
|
projip="$BEAMERIP"
|
||||||
|
# from the acer webpage we read that bytes 30-31 contain 00 if power off and 01 if power on
|
||||||
# we only test if 01, because if off, it can also give no response
|
# we only test if 01, because if off, it can also give no response
|
||||||
# but seems to be bytes 32-33 more accurate
|
# but seems to be bytes 32-33 more accurate
|
||||||
statusbyte="$(wget -qO - 'http://'"$projip"'/tgi/return.tgi?query=info'|awk -F'[<>]' '/<info>/{print substr($3,31,2)}')"
|
statusbyte="$(wget -qO - 'http://'"$projip"'/tgi/return.tgi?query=info'|awk -F'[<>]' '/<info>/{print substr($3,31,2)}')"
|
||||||
|
|
|
@ -1,4 +1,16 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
PEOPLECOUNTERIP=$(cat $(dirname "$0")"/peoplecounterip.txt")
|
||||||
|
# we now have a people counter
|
||||||
|
p="$(
|
||||||
|
wget -qO - "http://$PEOPLECOUNTERIP/output.cgi?t=$(date +%s)" |
|
||||||
|
sed 's/.*Occupancy://'|
|
||||||
|
awk '{print $2}')"
|
||||||
|
if [ "$p" != "" ]
|
||||||
|
then
|
||||||
|
echo "$p" > /run/presency
|
||||||
|
else
|
||||||
|
logger $0 cannot access people counter. fallback to dhcp value guessing
|
||||||
|
fi
|
||||||
n=0
|
n=0
|
||||||
for i in $(ls /run/dhcp-leases/)
|
for i in $(ls /run/dhcp-leases/)
|
||||||
do
|
do
|
||||||
|
@ -18,4 +30,7 @@ do
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "$n" > /run/presency
|
if [ "$p" = "" ] # write DHCP count if people counter offline
|
||||||
|
then
|
||||||
|
echo "$n" > /run/presency
|
||||||
|
fi
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
# changes level2 state by the state of the main door
|
# changes level2 state by the state of the main door
|
||||||
# i.e. people have to leave it open to keep status open
|
# i.e. people have to leave it open to keep status open
|
||||||
sleep 1 # silly way to debounce
|
sleep 1 # silly way to debounce
|
||||||
|
if [ ! -f /run/spacestatus ] # needed to init after boot
|
||||||
|
then
|
||||||
|
cp -p /root/var/spacestatus /run/spacestatus
|
||||||
|
fi
|
||||||
if [ "$1" = "pushed" ] &&
|
if [ "$1" = "pushed" ] &&
|
||||||
[ "$(cat /run/spacestatus)" = "open" ]
|
[ "$(cat /run/spacestatus)" = "open" ]
|
||||||
then
|
then
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/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
|
||||||
|
PEOPLECOUNTERIP=$(cat $(dirname "$0")"/peoplecounterip.txt")
|
||||||
|
state="online"
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
p="$(
|
||||||
|
wget -qO - "http://$PEOPLECOUNTERIP/output.cgi?t=$(date +%s)" |
|
||||||
|
sed 's/.*Occupancy://'|
|
||||||
|
awk '{print $2}')"
|
||||||
|
if [ "$p" != "" ]
|
||||||
|
then
|
||||||
|
oldp="$(cat /run/peoplecounter)"
|
||||||
|
echo "$p" > /run/peoplecounter
|
||||||
|
if [ "$p" != "$oldp" ]
|
||||||
|
then
|
||||||
|
logger $0 changed from $oldp to $p people
|
||||||
|
fi
|
||||||
|
if [ "$state" = "offline" ]
|
||||||
|
then
|
||||||
|
state="online"
|
||||||
|
logger $0 people counter online
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$state" = "online" ]
|
||||||
|
then
|
||||||
|
state="offline"
|
||||||
|
logger $0 people counter offline
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
done
|
|
@ -1,4 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
sleep 5
|
||||||
IGNORE_DOORLOCKBUTTON="no"
|
IGNORE_DOORLOCKBUTTON="no"
|
||||||
LockDir="/run/$(basename "$0").run"
|
LockDir="/run/$(basename "$0").run"
|
||||||
spaceapikey="$(cat "$(dirname $0)"/spaceapikey.txt)"
|
spaceapikey="$(cat "$(dirname $0)"/spaceapikey.txt)"
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# this script only makes sense if there is a good people counter installed
|
||||||
|
if [ "$1" = "closed" ] && [ "$2" = "open" ]
|
||||||
|
then
|
||||||
|
p="$(cat /run/presency)"
|
||||||
|
if [ "$p" != "0" ]
|
||||||
|
then
|
||||||
|
logger $0 There are $p people, closed door from inside waiting 1 min.
|
||||||
|
sleep 60
|
||||||
|
p="$(cat /run/presency)"
|
||||||
|
logger $0 There are $p people, closed door from inside after 1 min.
|
||||||
|
else
|
||||||
|
logger $0 There are $p people, correctly closed door from outside.
|
||||||
|
fi &
|
||||||
|
fi
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env python2.7
|
||||||
|
import requests
|
||||||
|
import flask
|
||||||
|
import re
|
||||||
|
|
||||||
|
app = flask.Flask(__name__)
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def status():
|
||||||
|
try:
|
||||||
|
res = requests.get("http://10.2.113.7/tgi/return.tgi?query=info", timeout=1)
|
||||||
|
if "NG" in res.content:
|
||||||
|
return "0"
|
||||||
|
reg_res = re.findall(b"<info>([^<]*)</info>", res.content)
|
||||||
|
status = str(reg_res[0][30:32])
|
||||||
|
if status == "01":
|
||||||
|
return "1"
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return "0"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run("0.0.0.0", 5042)
|
|
@ -74,3 +74,6 @@ T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
|
||||||
# pidor
|
# pidor
|
||||||
P0:2345:respawn:/root/pidor/scripts/lockbutton.sh
|
P0:2345:respawn:/root/pidor/scripts/lockbutton.sh
|
||||||
P1:2345:respawn:/root/pidor/scripts/beamerdetect.sh
|
P1:2345:respawn:/root/pidor/scripts/beamerdetect.sh
|
||||||
|
P2:2345:respawn:/root/pidor/scripts/ws4beamer_status.py
|
||||||
|
P3:2345:respawn:/root/pidor/scripts/peoplecounter-realtime.sh
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue