From f69f04d19dbd06bd2e830c92afca064c8dd34039 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 17:29:00 -0400 Subject: [PATCH] changes that remove the default `pi` user --- homepage/index.php | 10 +++---- homepage/views.php | 44 ++++++++++++++--------------- scripts/advanced.php | 45 ++++++++++++++++------------- scripts/analyze.py | 1 + scripts/birdnet_analysis.sh | 12 ++++---- scripts/birdnetpi_request.php | 10 +++---- scripts/birdweather_request.php | 10 +++---- scripts/clear_all_data.sh | 50 ++++++++++++++++++--------------- scripts/config.php | 16 +++++------ scripts/daily_plot.py | 9 ++++-- scripts/exclude_list.php | 4 +-- scripts/history.php | 6 ++-- scripts/include_list.php | 4 +-- scripts/install_services.sh | 5 +++- scripts/overview.php | 7 ++--- scripts/play.php | 2 +- scripts/plotly_streamlit.py | 17 +++-------- scripts/privacy_server.py | 19 +++++++------ scripts/server.py | 35 +++++++++++++---------- scripts/spectrogram.php | 8 +++--- scripts/spectrogram.sh | 2 +- scripts/stats.php | 2 +- scripts/system_controls.php | 2 +- scripts/todays_detections.php | 2 +- 24 files changed, 169 insertions(+), 153 deletions(-) diff --git a/homepage/index.php b/homepage/index.php index 83fe381..f2eacb7 100644 --- a/homepage/index.php +++ b/homepage/index.php @@ -18,10 +18,10 @@ echo " "; } if(isset($_GET['log'])) { - if (file_exists('/home/*/BirdNET-Pi/thisrun.txt')) { + if (file_exists('./scripts/thisrun.txt')) { header("Location: /log");} } elseif(isset($_GET['spectrogram'])){ header("Location: /spectrogram.php"); diff --git a/homepage/views.php b/homepage/views.php index 8838c98..10a356a 100644 --- a/homepage/views.php +++ b/homepage/views.php @@ -45,10 +45,10 @@ if(isset($_POST['view'])){ if($_POST['view'] == "Streamlit"){header('location:/stats');} if($_POST['view'] == "Daily Charts"){include('history.php');} if($_POST['view'] == "Tools"){ - if (file_exists('/home/*/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/thisrun.txt'); - } elseif (file_exists('/home/*/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/firstrun.ini'); + if (file_exists('./scripts/thisrun.txt')) { + $config = parse_ini_file('./scripts/thisrun.txt'); + } elseif (file_exists('./scripts/firstrun.ini')) { + $config = parse_ini_file('./scripts/firstrun.ini'); } $caddypwd = $config['CADDY_PWD']; if (!isset($_SERVER['PHP_AUTH_USER'])) { @@ -87,64 +87,64 @@ if(isset($_POST['view'])){ if($_POST['view'] == "Advanced"){include('scripts/advanced.php');} if($_POST['view'] == "Included"){ if(isset($_POST['species']) && isset($_POST['add'])){ - $file = '/home/*/BirdNET-Pi/include_species_list.txt'; + $file = './scripts/include_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $str); file_put_contents("$file", "$str"); if(isset($_POST['species'])){ foreach ($_POST['species'] as $selectedOption) - file_put_contents("/home/*/BirdNET-Pi/include_species_list.txt", $selectedOption."\n", FILE_APPEND); + file_put_contents("./scripts/include_species_list.txt", $selectedOption."\n", FILE_APPEND); } } elseif(isset($_POST['species']) && isset($_POST['del'])){ - $file = '/home/*/BirdNET-Pi/include_species_list.txt'; + $file = './scripts/include_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); foreach($_POST['species'] as $selectedOption) { - $content = file_get_contents("/home/*/BirdNET-Pi/include_species_list.txt"); + $content = file_get_contents("../BirdNET-Pi/include_species_list.txt"); $newcontent = str_replace($selectedOption, "", "$content"); - file_put_contents("/home/*/BirdNET-Pi/include_species_list.txt", "$newcontent"); + file_put_contents("./scripts/include_species_list.txt", "$newcontent"); } - $file = '/home/*/BirdNET-Pi/include_species_list.txt'; + $file = './scripts/include_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); } - include('scripts/include_list.php'); + include('./scripts/include_list.php'); } if($_POST['view'] == "Excluded"){ if(isset($_POST['species']) && isset($_POST['add'])){ - $file = '/home/*/BirdNET-Pi/exclude_species_list.txt'; + $file = './scripts/exclude_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $str); file_put_contents("$file", "$str"); foreach ($_POST['species'] as $selectedOption) - file_put_contents("/home/*/BirdNET-Pi/exclude_species_list.txt", $selectedOption."\n", FILE_APPEND); + file_put_contents("./scripts/exclude_species_list.txt", $selectedOption."\n", FILE_APPEND); } elseif (isset($_POST['species']) && isset($_POST['del'])){ - $file = '/home/*/BirdNET-Pi/exclude_species_list.txt'; + $file = './scripts/exclude_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); foreach($_POST['species'] as $selectedOption) { - $content = file_get_contents("/home/*/BirdNET-Pi/exclude_species_list.txt"); + $content = file_get_contents("./scripts/exclude_species_list.txt"); $newcontent = str_replace($selectedOption, "", "$content"); - file_put_contents("/home/*/BirdNET-Pi/exclude_species_list.txt", "$newcontent"); + file_put_contents("./scripts/exclude_species_list.txt", "$newcontent"); } - $file = '/home/*/BirdNET-Pi/exclude_species_list.txt'; + $file = './scripts/exclude_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); } - include('scripts/exclude_list.php'); + include('./scripts/exclude_list.php'); } if($_POST['view'] == "File"){ header('Location: scripts/filemanager/filemanager.php'); } if($_POST['view'] == "Webterm"){ - if (file_exists('/home/*/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/thisrun.txt'); - } elseif (file_exists('/home/*/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/firstrun.ini'); + if (file_exists('./scripts/thisrun.txt')) { + $config = parse_ini_file('./scripts/thisrun.txt'); + } elseif (file_exists('./scripts/firstrun.ini')) { + $config = parse_ini_file('./scripts/firstrun.ini'); } $caddypwd = $config['CADDY_PWD']; if (!isset($_SERVER['PHP_AUTH_USER'])) { diff --git a/scripts/advanced.php b/scripts/advanced.php index 434a5f2..7d9007a 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -3,10 +3,10 @@ ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); -if (file_exists('/home/*/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/thisrun.txt'); -} elseif (file_exists('/home/*/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/*/BirdNET-Pi/firstrun.ini'); +if (file_exists('./scripts/thisrun.txt')) { + $config = parse_ini_file('./scripts/thisrun.txt'); +} elseif (file_exists('firstrun.ini')) { + $config = parse_ini_file('firstrun.ini'); } $caddypwd = $config['CADDY_PWD']; @@ -27,16 +27,16 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) { } if(isset($_POST['submit'])) { - $contents = file_get_contents("/home/*/BirdNET-Pi/birdnet.conf"); - $contents2 = file_get_contents("/home/*/BirdNET-Pi/thisrun.txt"); + $contents = file_get_contents('/etc/birdnet/birdnet.conf'); + $contents2 = file_get_contents('./scripts/thisrun.txt'); if(isset($_POST["caddy_pwd"])) { $caddy_pwd = $_POST["caddy_pwd"]; if(strcmp($caddy_pwd,$config['CADDY_PWD']) !== 0) { $contents = preg_replace("/CADDY_PWD=.*/", "CADDY_PWD=$caddy_pwd", $contents); $contents2 = preg_replace("/CADDY_PWD=.*/", "CADDY_PWD=$caddy_pwd", $contents2); - $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen('/etc/birdnet/birdnet.conf', "w"); + $fh2 = fopen("./scripts/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); exec('sudo /usr/local/bin/update_caddyfile.sh > /dev/null 2>&1 &'); @@ -56,8 +56,8 @@ if(isset($_POST['submit'])) { if(strcmp($birdnetpi_url,$config['BIRDNETPI_URL']) !== 0) { $contents = preg_replace("/BIRDNETPI_URL=.*/", "BIRDNETPI_URL=$birdnetpi_url", $contents); $contents2 = preg_replace("/BIRDNETPI_URL=.*/", "BIRDNETPI_URL=$birdnetpi_url", $contents2); - $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen('/etc/birdnet/birdnet.conf', "w"); + $fh2 = fopen("./scripts/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); exec('sudo /usr/local/bin/update_caddyfile.sh > /dev/null 2>&1 &'); @@ -98,17 +98,24 @@ if(isset($_POST['submit'])) { if(isset($_POST["privacy_mode"])) { $privacy_mode = $_POST["privacy_mode"]; - if(strcmp($privacy_mode,$config['PRIVACY_MODE']) !== 0) { + if(strcmp($config['PRIVACY_MODE'], "1") == 0 ) { + $pmode = "on"; + }elseif(strcmp($config['PRIVACY_MODE'], "") == 0) { + $pmode = "off"; + } + if(strcmp($privacy_mode,$pmode) !== 0) { $contents = preg_replace("/PRIVACY_MODE=.*/", "PRIVACY_MODE=$privacy_mode", $contents); $contents2 = preg_replace("/PRIVACY_MODE=.*/", "PRIVACY_MODE=$privacy_mode", $contents2); if(strcmp($privacy_mode,"on") == 0) { - exec('sudo sed -i \'s/server.py/privacy_server.py/g\' /home/*/BirdNET-Pi/templates/birdnet_server.service'); + exec('sudo sed -i \'s/\/usr\/local\/bin\/server.py/\/usr\/local\/bin\/privacy_server.py/g\' ../../BirdNET-Pi/templates/birdnet_server.service'); exec('sudo systemctl daemon-reload'); exec('restart_services.sh'); + header('Location: /log'); } elseif(strcmp($privacy_mode,"off") == 0) { - exec('sudo sed -i \'s/privacy_server.py/server.py/g\' /home/*/BirdNET-Pi/templates/birdnet_server.service'); + exec('sudo sed -i \'s/\/usr\/local\/bin\/privacy_server.py/\/usr\/local\/bin\/server.py/g\' ../../BirdNET-Pi/templates/birdnet_server.service'); exec('sudo systemctl daemon-reload'); exec('restart_services.sh'); + header('Location: /log'); } } } @@ -153,8 +160,8 @@ if(isset($_POST['submit'])) { } } - $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen('/etc/birdnet/birdnet.conf', "w"); + $fh2 = fopen("./scripts/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); } @@ -167,10 +174,10 @@ if(isset($_POST['submit'])) {

Advanced Settings

diff --git a/scripts/analyze.py b/scripts/analyze.py index 4f36e80..67fd742 100755 --- a/scripts/analyze.py +++ b/scripts/analyze.py @@ -1,3 +1,4 @@ +#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import argparse import socket diff --git a/scripts/birdnet_analysis.sh b/scripts/birdnet_analysis.sh index 228f35a..f0e1e68 100755 --- a/scripts/birdnet_analysis.sh +++ b/scripts/birdnet_analysis.sh @@ -5,10 +5,10 @@ source /etc/birdnet/birdnet.conf # Document this run's birdnet.conf settings # Make a temporary file to compare the current birdnet.conf with # the birdnet.conf as it was the last time this script was called -my_dir=$(realpath $(dirname $0)) -if [ -z ${THIS_RUN} ];then THIS_RUN=/home/*/BirdNET-Pi/thisrun.txt;fi +my_dir=$HOME/BirdNET-Pi/scripts +if [ -z ${THIS_RUN} ];then THIS_RUN=$my_dir/thisrun.txt;fi [ -f ${THIS_RUN} ] || touch ${THIS_RUN} && chmod g+w ${THIS_RUN} -if [ -z ${LAST_RUN} ];then LAST_RUN=/home/*/BirdNET-Pi/lastrun.txt;fi +if [ -z ${LAST_RUN} ];then LAST_RUN=$my_dir/lastrun.txt;fi [ -z ${LATITUDE} ] && echo "LATITUDE not set, exiting 1" && exit 1 [ -z ${LONGITUDE} ] && echo "LONGITUDE not set, exiting 1" && exit 1 make_thisrun() { @@ -27,8 +27,8 @@ if ! diff ${LAST_RUN} ${THIS_RUN};then sudo systemctl start birdnet_recording.service fi -INCLUDE_LIST="/home/*/BirdNET-Pi/include_species_list.txt" -EXCLUDE_LIST="/home/*/BirdNET-Pi/exclude_species_list.txt" +INCLUDE_LIST="$HOME/BirdNET-Pi/include_species_list.txt" +EXCLUDE_LIST="$HOME/BirdNET-Pi/exclude_species_list.txt" if [ ! -f ${INCLUDE_LIST} ];then touch ${INCLUDE_LIST} && chmod g+rw ${INCLUDE_LIST} @@ -96,7 +96,7 @@ run_analysis() { fi for i in "${files[@]}";do - echo "${1}/${i}" > /home/*/BirdNET-Pi/analyzing_now.txt + echo "${1}/${i}" > $HOME/BirdNET-Pi/analyzing_now.txt [ -z ${RECORDING_LENGTH} ] && RECORDING_LENGTH=15 [ ${RECORDING_LENGTH} == "60" ] && RECORDING_LENGTH=01:00 FILE_LENGTH="$(ffmpeg -i ${1}/${i} 2>&1 | awk -F. '/Duration/ {print $1}' | cut -d':' -f3-4)" diff --git a/scripts/birdnetpi_request.php b/scripts/birdnetpi_request.php index 91986a5..0cf7a5a 100644 --- a/scripts/birdnetpi_request.php +++ b/scripts/birdnetpi_request.php @@ -1,10 +1,10 @@ $value) { diff --git a/scripts/birdweather_request.php b/scripts/birdweather_request.php index c22e78c..fa4f6f3 100644 --- a/scripts/birdweather_request.php +++ b/scripts/birdweather_request.php @@ -1,10 +1,10 @@ $value) { diff --git a/scripts/clear_all_data.sh b/scripts/clear_all_data.sh index cb3612b..d574f5e 100755 --- a/scripts/clear_all_data.sh +++ b/scripts/clear_all_data.sh @@ -3,7 +3,10 @@ # starting all data-collection from scratch. Only run this if you are sure # you are okay will losing all the data that you've collected and processed # so far. +set -x source /etc/birdnet/birdnet.conf +USER=$(awk -F: '/1000/ {print $1}' /etc/passwd) +HOME=$(awk -F: '/1000/ {print $6}' /etc/passwd) my_dir=${HOME}/BirdNET-Pi/scripts echo "Stopping services" sudo systemctl stop birdnet_recording.service @@ -14,32 +17,35 @@ sudo rm -drf "${RECS_DIR}" sudo rm -f "${IDFILE}" sudo rm -f $(dirname ${my_dir})/BirdDB.txt -echo "Creating necessary directories" -[ -d ${EXTRACTED} ] || mkdir -p ${EXTRACTED} -[ -d ${EXTRACTED}/By_Date ] || mkdir -p ${EXTRACTED}/By_Date -[ -d ${EXTRACTED}/Charts ] || mkdir -p ${EXTRACTED}/Charts -[ -d ${PROCESSED} ] || mkdir -p ${PROCESSED} +echo "Re-creating necessary directories" +[ -d ${EXTRACTED} ] || sudo -u ${USER} mkdir -p ${EXTRACTED} +[ -d ${EXTRACTED}/By_Date ] || sudo -u ${USER} mkdir -p ${EXTRACTED}/By_Date +[ -d ${EXTRACTED}/Charts ] || sudo -u ${USER} mkdir -p ${EXTRACTED}/Charts +[ -d ${PROCESSED} ] || sudo -u ${USER} mkdir -p ${PROCESSED} + +sudo -u ${USER} ln -fs $(dirname $my_dir)/exclude_species_list.txt $my_dir +sudo -u ${USER} ln -fs $(dirname $my_dir)/include_species_list.txt $my_dir +sudo -u ${USER} ln -fs $(dirname $my_dir)/homepage/* ${EXTRACTED} +sudo -u ${USER} ln -fs $(dirname $my_dir)/model/labels.txt ${my_dir} +sudo -u ${USER} ln -fs $my_dir ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/play.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/spectrogram.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/overview.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/stats.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/todays_detections.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/history.php ${EXTRACTED} +sudo -u ${USER} ln -fs $my_dir/homepage/images/favicon.ico ${EXTRACTED} +sudo -u ${USER} ln -fs ${HOME}/phpsysinfo ${EXTRACTED} +sudo -u ${USER} ln -fs $(dirname $my_dir)/templates/phpsysinfo.ini ${HOME}/phpsysinfo/ +sudo -u ${USER} ln -fs $(dirname $my_dir)/templates/green_bootstrap.css ${HOME}/phpsysinfo/templates/ +sudo -u ${USER} ln -fs $(dirname $my_dir)/templates/index_bootstrap.html ${HOME}/phpsysinfo/templates/html +chmod -R g+rw $my_dir +chmod -R g+rw ${RECS_DIR} -ln -fs $(dirname ${my_dir})/homepage/* ${EXTRACTED} -ln -fs $(dirname ${my_dir})/model/labels.txt ${my_dir}/ -ln -fs $(dirname ${my_dir})/scripts ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/play.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/spectrogram.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/overview.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/stats.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/todays_detections.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/scripts/history.php ${EXTRACTED} -ln -fs $(dirname ${my_dir})/homepage/images/favicon.ico ${EXTRACTED} -ln -fs ${HOME}/phpsysinfo ${EXTRACTED} -ln -fs $(dirname ${my_dir})/templates/phpsysinfo.ini ${HOME}/phpsysinfo/ -ln -fs $(dirname ${my_dir})/templates/green_bootstrap.css ${HOME}/phpsysinfo/templates/ -ln -fs $(dirname ${my_dir})/templates/index_bootstrap.html ${HOME}/phpsysinfo/templates/html -sudo chmod -R g+rw $(dirname ${my_dir}) -sudo chmod -R g+rw ${EXTRACTED} echo "Dropping and re-creating database" createdb.sh -echo "Generating BirdDB.txt" +echo "Re-generating BirdDB.txt" touch $(dirname ${my_dir})/BirdDB.txt echo "Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap" > $(dirname ${my_dir})/BirdDB.txt ln -sf $(dirname ${my_dir})/BirdDB.txt ${my_dir}/BirdDB.txt diff --git a/scripts/config.php b/scripts/config.php index 1aad33f..7f78a15 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -10,22 +10,22 @@ $birdweather_id = $_POST["birdweather_id"]; $pushed_app_key = $_POST["pushed_app_key"]; $pushed_app_secret = $_POST["pushed_app_secret"]; -$contents = file_get_contents("/home/*/BirdNET-Pi/birdnet.conf"); +$contents = file_get_contents("/etc/birdnet/birdnet.conf"); $contents = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents); $contents = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents); $contents = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents); $contents = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents); $contents = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents); -$contents2 = file_get_contents("/home/*/BirdNET-Pi/thisrun.txt"); +$contents2 = file_get_contents("./scripts/thisrun.txt"); $contents2 = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents2); $contents2 = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents2); $contents2 = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents2); $contents2 = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents2); $contents2 = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents2); -$fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); -$fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); +$fh = fopen("/etc/birdnet/birdnet.conf", "w"); +$fh2 = fopen("./scripts/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); @@ -46,10 +46,10 @@ if ($language != "none"){

Basic Settings

Excluded Species List $lines";} diff --git a/scripts/install_services.sh b/scripts/install_services.sh index 891ef91..9ae5912 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -115,8 +115,10 @@ create_necessary_dirs() { [ -d ${EXTRACTED}/Charts ] || sudo -u ${USER} mkdir -p ${EXTRACTED}/Charts [ -d ${PROCESSED} ] || sudo -u ${USER} mkdir -p ${PROCESSED} + sudo -u ${USER} ln -fs $my_dir/exclude_species_list.txt $my_dir/scripts + sudo -u ${USER} ln -fs $my_dir/include_species_list.txt $my_dir/scripts sudo -u ${USER} ln -fs $my_dir/homepage/* ${EXTRACTED} - sudo -u ${USER} ln -fs $my_dir/model/labels.txt ${my_dir} + sudo -u ${USER} ln -fs $my_dir/model/labels.txt ${my_dir}/scripts sudo -u ${USER} ln -fs $my_dir/scripts ${EXTRACTED} sudo -u ${USER} ln -fs $my_dir/scripts/play.php ${EXTRACTED} sudo -u ${USER} ln -fs $my_dir/scripts/spectrogram.php ${EXTRACTED} @@ -255,6 +257,7 @@ EOF systemctl enable caddy usermod -aG $USER caddy + usermod -aG video caddy } install_avahi_aliases() { diff --git a/scripts/overview.php b/scripts/overview.php index 4314303..49657af 100644 --- a/scripts/overview.php +++ b/scripts/overview.php @@ -1,12 +1,9 @@
"; } else { echo "

No Detections For Today

"; diff --git a/scripts/play.php b/scripts/play.php index 334c23b..8efb947 100644 --- a/scripts/play.php +++ b/scripts/play.php @@ -3,7 +3,7 @@ ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); -$db = new SQLite3('/home/*/BirdNET-Pi/scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); +$db = new SQLite3('./scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); if($db == False){ echo "Database is busy"; header("refresh: 0;"); diff --git a/scripts/plotly_streamlit.py b/scripts/plotly_streamlit.py index 95b5f15..3a8ca8f 100755 --- a/scripts/plotly_streamlit.py +++ b/scripts/plotly_streamlit.py @@ -1,3 +1,5 @@ +#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 +import os import streamlit as st import pandas as pd import numpy as np @@ -8,7 +10,8 @@ from pathlib import Path import sqlite3 from sqlite3 import Connection -URI_SQLITE_DB = "/home/*/BirdNET-Pi/scripts/birds.db" +userDir = os.path.expanduser('~') +URI_SQLITE_DB = userDir + '/BirdNET-Pi/scripts/birds.db' st.set_page_config(layout='wide') @@ -30,24 +33,12 @@ st.markdown(""" """, unsafe_allow_html=True) -col1,col2,col3 = st.columns([20,20,20]) - -col1.title('BirdNET-Pi', anchor=None) -col2.image('/home/*/BirdNET-Pi/homepage/images/bird.png') -col3.text('') - @st.cache(hash_funcs={Connection: id}) def get_connection(path:str): return sqlite3.connect(path,check_same_thread=False) - - -# def load_data(): -# df1 = pd.read_csv('/home/*/BirdNET-Pi/BirdDB.txt', sep=';') -# return df1 - def get_data(conn: Connection): df1=pd.read_sql("SELECT * FROM detections", con=conn) return df1 diff --git a/scripts/privacy_server.py b/scripts/privacy_server.py index d98d1a1..d5b6ca1 100755 --- a/scripts/privacy_server.py +++ b/scripts/privacy_server.py @@ -1,3 +1,4 @@ +#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os @@ -43,7 +44,8 @@ except: # Open most recent Configuration and grab DB_PWD as a python variable -with open('/home/*/BirdNET-Pi/thisrun.txt', 'r') as f: +userDir = os.path.expanduser('~') +with open(userDir + '/BirdNET-Pi/thisrun.txt', 'r') as f: this_run = f.readlines() audiofmt = "." + str(str(str([i for i in this_run if i.startswith('AUDIOFMT')]).split('=')[1]).split('\\')[0]) @@ -58,7 +60,8 @@ def loadModel(): print('LOADING TF LITE MODEL...', end=' ') # Load TFLite model and allocate tensors. - myinterpreter = tflite.Interpreter(model_path='/home/*/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) + modelpath = userDir + '/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite' + myinterpreter = tflite.Interpreter(model_path=modelpath,num_threads=2) myinterpreter.allocate_tensors() # Get input and output tensors. @@ -72,7 +75,7 @@ def loadModel(): # Load labels CLASSES = [] - with open('/home/*/BirdNET-Pi/model/labels.txt', 'r') as lfile: + with open(userDir + '/BirdNET-Pi/model/labels.txt', 'r') as lfile: for line in lfile.readlines(): CLASSES.append(line.replace('\n', '')) @@ -169,7 +172,7 @@ def predict(sample, sensitivity): if p_sorted[i][0]=='Human_Human': print("HUMAN SCORE:",str(p_sorted[i])) HUMAN_FLAG=True - with open('/home/*/BirdNET-Pi/HUMAN.txt', 'a') as rfile: + with open(userDir + '/BirdNET-Pi/HUMAN.txt', 'a') as rfile: rfile.write(str(datetime.datetime.now())+str(p_sorted[i])+ '\n') # date_stamp=datetime.datetime.now().strftime("%d_%m_%y_%H:%M:%S") # @@ -258,8 +261,8 @@ def handle_client(conn, addr): args = type('', (), {})() - args.i = '/home/*/test.wav' - args.o = '/home/*/test.wav.csv' + args.i = '' + args.o = '' args.birdweather_id = '99999' args.include_list = 'null' args.exclude_list = 'null' @@ -354,7 +357,7 @@ def handle_client(conn, addr): myReturn += str(i) + '-' + str(detections[i][0]) + '\n' - with open('/home/*/BirdNET-Pi/BirdDB.txt', 'a') as rfile: + with open(userDir + '/BirdNET-Pi/BirdDB.txt', 'a') as rfile: for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): @@ -380,7 +383,7 @@ def handle_client(conn, addr): #Connect to SQLite Database try: - con = sqlite3.connect('/home/*/BirdNET-Pi/scripts/birds.db') + con = sqlite3.connect(userDir + '/BirdNET-Pi/scripts/birds.db') cur = con.cursor() cur.execute("INSERT INTO detections VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (Date, Time, Sci_Name, Com_Name, str(score), Lat, Lon, Cutoff, Week, Sens, Overlap, File_Name)) diff --git a/scripts/server.py b/scripts/server.py index aff7b3d..21c7554 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -1,3 +1,4 @@ +#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os @@ -43,7 +44,8 @@ except: # Open most recent Configuration and grab DB_PWD as a python variable -with open('/home/*/BirdNET-Pi/thisrun.txt', 'r') as f: +userDir = os.path.expanduser('~') +with open(userDir + '/BirdNET-Pi/scripts/thisrun.txt', 'r') as f: this_run = f.readlines() audiofmt = "." + str(str(str([i for i in this_run if i.startswith('AUDIOFMT')]).split('=')[1]).split('\\')[0]) @@ -58,7 +60,8 @@ def loadModel(): print('LOADING TF LITE MODEL...', end=' ') # Load TFLite model and allocate tensors. - myinterpreter = tflite.Interpreter(model_path='/home/*/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) + modelpath = userDir + '/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite' + myinterpreter = tflite.Interpreter(model_path=modelpath,num_threads=1) myinterpreter.allocate_tensors() # Get input and output tensors. @@ -72,7 +75,8 @@ def loadModel(): # Load labels CLASSES = [] - with open('/home/*/BirdNET-Pi/model/labels.txt', 'r') as lfile: + labelspath = userDir + '/BirdNET-Pi/model/labels.txt' + with open(labelspath, 'r') as lfile: for line in lfile.readlines(): CLASSES.append(line.replace('\n', '')) @@ -232,8 +236,8 @@ def handle_client(conn, addr): args = type('', (), {})() - args.i = '/home/*/test.wav' - args.o = '/home/*/test.wav.csv' + args.i = '' + args.o = '' args.birdweather_id = '99999' args.include_list = 'null' args.exclude_list = 'null' @@ -328,7 +332,7 @@ def handle_client(conn, addr): myReturn += str(i) + '-' + str(detections[i][0]) + '\n' - with open('/home/*/BirdNET-Pi/BirdDB.txt', 'a') as rfile: + with open(userDir + '/BirdNET-Pi/BirdDB.txt', 'a') as rfile: for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): @@ -353,16 +357,17 @@ def handle_client(conn, addr): Date.replace("/", "-") + '-birdnet-' + Time + audiofmt #Connect to SQLite Database - try: - con = sqlite3.connect('/home/*/BirdNET-Pi/scripts/birds.db') - cur = con.cursor() - cur.execute("INSERT INTO detections VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (Date, Time, Sci_Name, Com_Name, str(score), Lat, Lon, Cutoff, Week, Sens, Overlap, File_Name)) + #try: + con = sqlite3.connect(userDir + '/BirdNET-Pi/scripts/birds.db') + cur = con.cursor() + cur.execute("INSERT INTO detections VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (Date, Time, Sci_Name, Com_Name, str(score), Lat, Lon, Cutoff, Week, Sens, Overlap, File_Name)) + + con.commit() + con.close() + #except: + # print("Database busy") + # time.sleep(2) - con.commit() - con.close() - except: - print("Database busy") - time.sleep(2) print(str(current_date) + ';' + str(current_time) + ';' + entry[0].replace('_', ';') + ';' + str(entry[1]) + ';' + str(args.lat) + ';' + str(args.lon) + ';' + str(min_conf) + ';' + str(week) + ';' + str(args.sensitivity) +';' + str(args.overlap) + Com_Name.replace(" ", "_") + '-' + str(score) + '-' + str(current_date) + '-birdnet-' + str(current_time) + audiofmt + '\n') if birdweather_id != "99999": diff --git a/scripts/spectrogram.php b/scripts/spectrogram.php index ca46f64..2ed5f72 100644 --- a/scripts/spectrogram.php +++ b/scripts/spectrogram.php @@ -1,8 +1,8 @@ Shutdown
- +
diff --git a/scripts/todays_detections.php b/scripts/todays_detections.php index 6c44493..eb18512 100644 --- a/scripts/todays_detections.php +++ b/scripts/todays_detections.php @@ -3,7 +3,7 @@ ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); -$db = new SQLite3('/home/*/BirdNET-Pi/scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); +$db = new SQLite3('./scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); if($db == False){ echo "Database is busy"; header("refresh: 0;");