make clearer why base page is not populating / add check recording (#624)

* add ability to check if last minute recorded to SD

* improve composition of web root

* add multicam to list of options in s10httpd

* make cgi-bin and sh functional / improve logic
This commit is contained in:
virmaior 2023-09-25 11:36:42 +09:00 committed by GitHub
parent c4c10e65cd
commit a91b20a959
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 228 additions and 0 deletions

View File

@ -0,0 +1,117 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Short-Description: Basic Web Server
# Description: If enabled, start the httpd web server
### END INIT INFO
. /opt/wz_mini/wz_mini.conf
compose_home()
{
target=/opt/wz_mini/www/index.html
rm $target
cp /opt/wz_mini/www/index.top.html $target
if [[ "$WEB_SERVER_OPTIONS" ]]; then
for part in $WEB_SERVER_OPTIONS
do
case "$part" in
cam) echo '<a class="server_LINK" href="/cgi-bin/cam.cgi" >Wyze Camera Core Config</a>' >> $target ;;
config) echo '<a class="server_LINK" href="/cgi-bin/config.cgi" >Wz Mini Configuration</a>' >> $target ;;
car) echo '<a class="server_LINK" href="/car.html" >Car Tool</a>' >> $target ;;
current) echo '<a class="server_LINK" href="/cgi-bin/jpeg.cgi" >Current Screen</a>' >> $target ;;
multicam) echo '<a class="server_LINK" href="/multicam.html" >Multi-Cam Viewer</a>' >> $target ;;
diag) echo '<a class="server_LINK" href="/cgi-bin/diagnostics.cgi" >Diagnostics</a>' >> $target ;;
status) echo '<a class="server_LINK" href="/cgi-bin/status.cgi?test=recording">Check Recording</a>' >> $target ;;
esac
done
echo '<a class="server_LINK" href="/mulitcam.html" >Multi-Cam</a>' >> $target
else
echo 'wz_mini.conf is missing the line WEB_SERVER_OPTIONS <br >';
echo 'to populate it with full capabilities:<pre>WEB_SERVER_OPTIONS="cam config car jpeg multicam diag status"</pre>';
fi
if [[ "$GO2RTC_SERVER_ENABLED" == "true" ]]; then
echo '<a class="server_LINK" href="#Go2RTC" onclick="javascript:event.target.port=1984">Go2RTC Server</a>' >> $target
fi
echo '<div id="display_BAR"><div class="github_link"><a target="_new" href="https://github.com/gtxaspec/wz_mini_hacks">GitHub: wz_mini_hack</a></div></div>' >> $target
echo '</body></html>' >> $target
}
create_httpdconf()
{
conffile="/opt/wz_mini/etc/httpd.conf"
if [[ -f $conffile ]]; then
rm $conffile
fi
if [[ "$WEB_SERVER_PASSWORD" == "" ]]; then
WEB_SERVER_PASSWORD=$(cat /opt/wz_mini/tmp/wlan0_mac)
fi
webpassword=$(busybox httpd -m "$WEB_SERVER_PASSWORD")
authline="/:$WEB_SERVER_LOGIN:$webpassword"
cat <<EOF > $conffile
$authline
EOF
}
do_start()
{
create_httpdconf
if [[ "$WEB_SERVER_AUTH" == "false" ]]; then
httpd -p 80 -h /opt/wz_mini/www
echo "httpd enabled"
elif [[ "$WEB_SERVER_AUTH" == "true" ]]; then
httpd -p 80 -h /opt/wz_mini/www -r "Identify yourself:" -c /opt/wz_mini/etc/httpd.conf
echo "httpd enabled"
fi
}
do_stop()
{
#pkill httpd
pidnum=$(ps | egrep "[0-9]{2} httpd -p 80" | awk '{print $1}')
if [[ -z $pidnum ]]; then
echo "httpd was not running"
else
kill $pidnum
echo "httpd killed"
fi
}
if [[ "$WEB_SERVER_ENABLED" == "true" ]]; then
case "$1" in
start)
echo "#####$(basename "$0")#####"
compose_home
do_start
;;
stop)
do_stop
;;
restart)
do_stop
compose_home
do_start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
fi

View File

@ -0,0 +1,111 @@
#!/bin/sh
# This serves a rudimentary webpage to test different items
. /opt/wz_mini/www/cgi-bin/shared.cgi
base='/opt/record/';
TZ=$(cat /configs/TZ)
test_recording()
{
msg=""
fpath=$(TZ="$TZ" date +"%Y%m%d")
nowmin=$(TZ="$TZ" date +"%M")
curmin=$((10#$nowmin - 1))
curhour=$(TZ="$TZ" date +"%H")
cursec=$(TZ="$TZ" date +"%S")
if [[ "$cursec" -lt "03" ]]; then
wt=$((3 - $cursec))
msg="delayed $wt seconds to allow copy to SD"
sleep $wt
fi
if [[ "$curmin" -eq "0" ]]; then
if [[ "$curhour" -gt "0" ]]; then
curhour=$(($curhour - 1))
curhour=$(printf %02d $curhour)
else
fpath=$(($fpath - 1))
curhour=23
fi
curmin=59
fi
curmin=$(printf %02d $curmin)
if [ ! -d "$base$fpath" ]; then
echo -e "NG $lb"
echo "Date directory does not exist ($base$fname)"
exit
fi
if [ ! -d "$base$fpath/$curhour" ]; then
echo -e "NG $lb"
echo "Hour directory does not exist ($base$fname/$curhour)"
exit
fi
if [ ! -f "$base$fpath/$curhour/$curmin.mp4" ]; then
echo -e "NG $lb"
echo "Last minute not recorded ($base$fname/$curhour/$curmin.mp4)"
exit
fi
echo "OK$lb"
echo found "$base$fpath/$curhour/$curmin.mp4"
echo $msg
}
if [ -z $REQUEST_METHOD ]; then
echo "run on command line -- not in web "
for ARGUMENT in "$@"
do
KEY=$(echo $ARGUMENT | cut -f1 -d=)
VALUE=$(echo $ARGUMENT | cut -f2 -d=)
case "$KEY" in
test) GET_test=${VALUE} ;;
esac
lb=""
done
elif [[ $REQUEST_METHOD = 'GET' ]]; then
echo "HTTP/1.1 200"
echo -e "Content-type: text/html\n\n"
echo ""
lb="<br >"
#since ash does not handle arrays we create variables using eval
IFS='&'
for PAIR in $QUERY_STRING
do
K=$(echo $PAIR | cut -f1 -d=)
VA=$(echo $PAIR | cut -f2 -d=)
eval GET_$K=$VA
done
fi
if [[ "$GET_test" = "recording" ]]; then
test_recording
fi