From 023b68f386cfb66b26ddde75f179f54e2ebc7613 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 10:16:54 -0400 Subject: [PATCH 01/38] making changes to accomodate removing the pi user --- birdnet.conf-defaults | 9 +---- homepage/index.php | 10 ++--- homepage/views.php | 40 ++++++++++---------- newinstaller.sh | 2 - scripts/advanced.php | 36 +++++++++--------- scripts/analyze.py | 1 - scripts/birdnet_analysis.sh | 10 ++--- scripts/birdnetpi_request.php | 8 ++-- scripts/birdweather_request.php | 8 ++-- scripts/clear_all_data.sh | 4 +- scripts/config.php | 18 ++++----- scripts/createdb.sh | 6 +-- scripts/daily_plot.py | 8 ++-- scripts/dump_logs.sh | 2 +- scripts/exclude_list.php | 2 +- scripts/extra_info.sh | 8 ++-- scripts/history.php | 6 +-- scripts/include_list.php | 2 +- scripts/install_birdnet.sh | 2 +- scripts/install_config.sh | 12 ++---- scripts/install_services.sh | 66 ++++++++++++++++----------------- scripts/overview.php | 4 +- scripts/play.php | 2 +- scripts/plotly_streamlit.py | 11 +++--- scripts/privacy_server.py | 19 +++++----- scripts/restart_services.sh | 2 +- scripts/server.py | 15 ++++---- scripts/species_notifier.sh | 2 +- scripts/spectrogram.php | 8 ++-- scripts/spectrogram.sh | 4 +- scripts/stats.php | 2 +- scripts/todays_detections.php | 2 +- scripts/uninstall.sh | 2 +- scripts/update_birdnet.sh | 8 ++-- scripts/update_caddyfile.sh | 4 +- scripts/update_species.sh | 2 +- scripts/write_config.sh | 2 +- templates/bashrc | 3 +- templates/cleanup.cron | 6 +-- 39 files changed, 167 insertions(+), 191 deletions(-) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index db40f10..5863aab 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -69,7 +69,7 @@ PUSHED_APP_SECRET= ## it needs to analyze. Be sure this directory is readable and writable for ## the BIRDNET_USER. -RECS_DIR=/home/pi/BirdSongs +RECS_DIR=$HOME/BirdSongs ## REC_CARD is the sound card you would want the birdnet_recording.service to ## use. Leave this as "default" to use PulseAudio (recommended), or use @@ -141,12 +141,7 @@ EXTRACTION_LENGTH= AUDIOFMT=mp3 -## BIRDNET_USER should be the non-root user systemd should use to execute each -## service. - -BIRDNET_USER=pi - ## These are just for debugging LAST_RUN= THIS_RUN= -IDFILE=/home/pi/BirdNET-Pi/IdentifiedSoFar.txt +IDFILE=$HOME/BirdNET-Pi/IdentifiedSoFar.txt diff --git a/homepage/index.php b/homepage/index.php index 98df2b4..83fe381 100644 --- a/homepage/index.php +++ b/homepage/index.php @@ -18,10 +18,10 @@ echo " "; } if(isset($_GET['log'])) { - if (file_exists('/home/pi/BirdNET-Pi/thisrun.txt')) { + if (file_exists('/home/*/BirdNET-Pi/thisrun.txt')) { header("Location: /log");} } elseif(isset($_GET['spectrogram'])){ header("Location: /spectrogram.php"); diff --git a/homepage/views.php b/homepage/views.php index ca94810..8838c98 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/pi/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/thisrun.txt'); - } elseif (file_exists('/home/pi/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/firstrun.ini'); + 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'); } $caddypwd = $config['CADDY_PWD']; if (!isset($_SERVER['PHP_AUTH_USER'])) { @@ -87,25 +87,25 @@ 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/pi/BirdNET-Pi/include_species_list.txt'; + $file = '/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/include_species_list.txt", $selectedOption."\n", FILE_APPEND); + file_put_contents("/home/*/BirdNET-Pi/include_species_list.txt", $selectedOption."\n", FILE_APPEND); } } elseif(isset($_POST['species']) && isset($_POST['del'])){ - $file = '/home/pi/BirdNET-Pi/include_species_list.txt'; + $file = '/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/include_species_list.txt"); + $content = file_get_contents("/home/*/BirdNET-Pi/include_species_list.txt"); $newcontent = str_replace($selectedOption, "", "$content"); - file_put_contents("/home/pi/BirdNET-Pi/include_species_list.txt", "$newcontent"); + file_put_contents("/home/*/BirdNET-Pi/include_species_list.txt", "$newcontent"); } - $file = '/home/pi/BirdNET-Pi/include_species_list.txt'; + $file = '/home/*/BirdNET-Pi/include_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); @@ -114,23 +114,23 @@ if(isset($_POST['view'])){ } if($_POST['view'] == "Excluded"){ if(isset($_POST['species']) && isset($_POST['add'])){ - $file = '/home/pi/BirdNET-Pi/exclude_species_list.txt'; + $file = '/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/exclude_species_list.txt", $selectedOption."\n", FILE_APPEND); + file_put_contents("/home/*/BirdNET-Pi/exclude_species_list.txt", $selectedOption."\n", FILE_APPEND); } elseif (isset($_POST['species']) && isset($_POST['del'])){ - $file = '/home/pi/BirdNET-Pi/exclude_species_list.txt'; + $file = '/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/exclude_species_list.txt"); + $content = file_get_contents("/home/*/BirdNET-Pi/exclude_species_list.txt"); $newcontent = str_replace($selectedOption, "", "$content"); - file_put_contents("/home/pi/BirdNET-Pi/exclude_species_list.txt", "$newcontent"); + file_put_contents("/home/*/BirdNET-Pi/exclude_species_list.txt", "$newcontent"); } - $file = '/home/pi/BirdNET-Pi/exclude_species_list.txt'; + $file = '/home/*/BirdNET-Pi/exclude_species_list.txt'; $str = file_get_contents("$file"); $str = preg_replace('/^\h*\v+/m', '', $str); file_put_contents("$file", "$str"); @@ -141,10 +141,10 @@ if(isset($_POST['view'])){ header('Location: scripts/filemanager/filemanager.php'); } if($_POST['view'] == "Webterm"){ - if (file_exists('/home/pi/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/thisrun.txt'); - } elseif (file_exists('/home/pi/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/firstrun.ini'); + 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'); } $caddypwd = $config['CADDY_PWD']; if (!isset($_SERVER['PHP_AUTH_USER'])) { diff --git a/newinstaller.sh b/newinstaller.sh index 315159f..9e2f4a5 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash # Simple new installer -HOME=/home/pi -USER=pi branch=main if ! which git &> /dev/null;then sudo apt update diff --git a/scripts/advanced.php b/scripts/advanced.php index 23e6ad2..434a5f2 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/pi/BirdNET-Pi/thisrun.txt')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/thisrun.txt'); -} elseif (file_exists('/home/pi/BirdNET-Pi/firstrun.ini')) { - $config = parse_ini_file('/home/pi/BirdNET-Pi/firstrun.ini'); +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'); } $caddypwd = $config['CADDY_PWD']; @@ -27,16 +27,16 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) { } if(isset($_POST['submit'])) { - $contents = file_get_contents("/home/pi/BirdNET-Pi/birdnet.conf"); - $contents2 = file_get_contents("/home/pi/BirdNET-Pi/thisrun.txt"); + $contents = file_get_contents("/home/*/BirdNET-Pi/birdnet.conf"); + $contents2 = file_get_contents("/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); + $fh2 = fopen("/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); + $fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); exec('sudo /usr/local/bin/update_caddyfile.sh > /dev/null 2>&1 &'); @@ -102,11 +102,11 @@ if(isset($_POST['submit'])) { $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/pi/BirdNET-Pi/templates/birdnet_server.service'); + exec('sudo sed -i \'s/server.py/privacy_server.py/g\' /home/*/BirdNET-Pi/templates/birdnet_server.service'); exec('sudo systemctl daemon-reload'); exec('restart_services.sh'); } elseif(strcmp($privacy_mode,"off") == 0) { - exec('sudo sed -i \'s/privacy_server.py/server.py/g\' /home/pi/BirdNET-Pi/templates/birdnet_server.service'); + exec('sudo sed -i \'s/privacy_server.py/server.py/g\' /home/*/BirdNET-Pi/templates/birdnet_server.service'); exec('sudo systemctl daemon-reload'); exec('restart_services.sh'); } @@ -153,8 +153,8 @@ if(isset($_POST['submit'])) { } } - $fh = fopen("/home/pi/BirdNET-Pi/birdnet.conf", "w"); - $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); + $fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); + $fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); } @@ -167,10 +167,10 @@ if(isset($_POST['submit'])) {

Advanced Settings

diff --git a/scripts/analyze.py b/scripts/analyze.py index dada0ae..4f36e80 100755 --- a/scripts/analyze.py +++ b/scripts/analyze.py @@ -1,4 +1,3 @@ -#!/home/pi/BirdNET-Pi/birdnet/bin/python3 import argparse import socket diff --git a/scripts/birdnet_analysis.sh b/scripts/birdnet_analysis.sh index acc0a47..228f35a 100755 --- a/scripts/birdnet_analysis.sh +++ b/scripts/birdnet_analysis.sh @@ -6,9 +6,9 @@ source /etc/birdnet/birdnet.conf # 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/pi/BirdNET-Pi/thisrun.txt;fi +if [ -z ${THIS_RUN} ];then THIS_RUN=/home/*/BirdNET-Pi/thisrun.txt;fi [ -f ${THIS_RUN} ] || touch ${THIS_RUN} && chmod g+w ${THIS_RUN} -if [ -z ${LAST_RUN} ];then LAST_RUN=/home/pi/BirdNET-Pi/lastrun.txt;fi +if [ -z ${LAST_RUN} ];then LAST_RUN=/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/include_species_list.txt" -EXCLUDE_LIST="/home/pi/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/pi/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 acb8769..91986a5 100644 --- a/scripts/birdnetpi_request.php +++ b/scripts/birdnetpi_request.php @@ -1,8 +1,8 @@ $(dirname ${my_dir})/BirdDB.txt ln -sf $(dirname ${my_dir})/BirdDB.txt ${my_dir}/BirdDB.txt -chown pi:pi ${my_dir}/BirdDB.txt && chmod g+rw ${my_dir}/BirdDB.txt +chown $USER:$USER ${my_dir}/BirdDB.txt && chmod g+rw ${my_dir}/BirdDB.txt echo "Restarting services" restart_services.sh diff --git a/scripts/config.php b/scripts/config.php index 4c07b90..1aad33f 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -10,28 +10,28 @@ $birdweather_id = $_POST["birdweather_id"]; $pushed_app_key = $_POST["pushed_app_key"]; $pushed_app_secret = $_POST["pushed_app_secret"]; -$contents = file_get_contents("/home/pi/BirdNET-Pi/birdnet.conf"); +$contents = file_get_contents("/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/thisrun.txt"); +$contents2 = file_get_contents("/home/*/BirdNET-Pi/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/pi/BirdNET-Pi/birdnet.conf", "w"); -$fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); +$fh = fopen("/home/*/BirdNET-Pi/birdnet.conf", "w"); +$fh2 = fopen("/home/*/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); $language = $_POST["language"]; if ($language != "none"){ - $command = "sudo -upi mv /home/pi/BirdNET-Pi/model/labels.txt /home/pi/BirdNET-Pi/model/labels.txt.old && sudo -upi unzip /home/pi/BirdNET-Pi/model/labels_l18n.zip $language -d /home/pi/BirdNET-Pi/model && sudo -upi mv /home/pi/BirdNET-Pi/model/$language /home/pi/BirdNET-Pi/model/labels.txt"; + $command = "sudo -upi mv /home/*/BirdNET-Pi/model/labels.txt /home/*/BirdNET-Pi/model/labels.txt.old && sudo -upi unzip /home/*/BirdNET-Pi/model/labels_l18n.zip $language -d /home/*/BirdNET-Pi/model && sudo -upi mv /home/*/BirdNET-Pi/model/$language /home/*/BirdNET-Pi/model/labels.txt"; $command_output = `$command`; } } @@ -46,10 +46,10 @@ if ($language != "none"){

Basic Settings

/dev/null LOG_DIR="${HOME}/BirdNET-Pi/logs" -my_dir=/home/pi/BirdNET-Pi/scripts +my_dir=$HOME/BirdNET-Pi/scripts services=$(awk '/service/ && /systemctl/ && !/php/ {print $3}' ${my_dir}/install_services.sh | sort) # Create logs directory diff --git a/scripts/exclude_list.php b/scripts/exclude_list.php index f49e27c..53e106b 100644 --- a/scripts/exclude_list.php +++ b/scripts/exclude_list.php @@ -39,7 +39,7 @@

Excluded Species List

$lines";} diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index f5d1f15..3dafad4 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -26,7 +26,7 @@ install_birdnet() { echo "Establishing a python virtual environment" python3 -m venv birdnet source ./birdnet/bin/activate - pip3 install -U -r /home/pi/BirdNET-Pi/requirements.txt + pip3 install -U -r $HOME/BirdNET-Pi/requirements.txt } [ -d ${RECS_DIR} ] || mkdir -p ${RECS_DIR} &> /dev/null diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 1ba34d6..a662534 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -83,7 +83,7 @@ PUSHED_APP_SECRET= ## it needs to analyze. Be sure this directory is readable and writable for ## the BIRDNET_USER. -RECS_DIR=/home/pi/BirdSongs +RECS_DIR=$HOME/BirdSongs ## REC_CARD is the sound card you would want the birdnet_recording.service to ## use. Leave this as "default" to use PulseAudio (recommended), or use @@ -95,11 +95,11 @@ REC_CARD=default ## after extractions have been made from them. This includes both WAVE and ## BirdNET.selection.txt files. -PROCESSED=/home/pi/BirdSongs/Processed +PROCESSED=$HOME/BirdSongs/Processed ## EXTRACTED is the directory where the extracted audio selections are moved. -EXTRACTED=/home/pi/BirdSongs/Extracted +EXTRACTED=$HOME/BirdSongs/Extracted ## OVERLAP is the value in seconds which BirdNET should use when analyzing ## the data. The values must be between 0.0-2.9. @@ -155,15 +155,11 @@ EXTRACTION_LENGTH= AUDIOFMT=mp3 -## BIRDNET_USER should be the non-root user systemd should use to execute each -## service. - -BIRDNET_USER=pi ## These are just for debugging LAST_RUN= THIS_RUN= -IDFILE=/home/pi/BirdNET-Pi/IdentifiedSoFar.txt +IDFILE=$HOME/BirdNET-Pi/IdentifiedSoFar.txt EOF } diff --git a/scripts/install_services.sh b/scripts/install_services.sh index a30ef58..7b88bff 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -3,9 +3,7 @@ set -x # Uncomment to enable debugging trap 'rm -f ${tmpfile}' EXIT trap 'exit 1' SIGINT SIGHUP -USER=pi -HOME=/home/pi -my_dir=${HOME}/BirdNET-Pi/scripts +my_dir=$HOME/BirdNET-Pi/scripts tmpfile=$(mktemp) config_file="$(dirname ${my_dir})/birdnet.conf" @@ -38,7 +36,7 @@ install_scripts() { } install_birdnet_analysis() { - cat << EOF > /home/pi/BirdNET-Pi/templates/birdnet_analysis.service + cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_analysis.service [Unit] Description=BirdNET Analysis After=birdnet_server.service @@ -52,12 +50,12 @@ ExecStart=/usr/local/bin/birdnet_analysis.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/birdnet_analysis.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/birdnet_analysis.service /usr/lib/systemd/system systemctl enable birdnet_analysis.service } install_birdnet_server() { - cat << EOF > /home/pi/BirdNET-Pi/templates/birdnet_server.service + cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_server.service [Unit] Description=BirdNET Analysis Server Before=birdnet_analysis.service @@ -70,12 +68,12 @@ ExecStart=/usr/local/bin/server.py [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/birdnet_server.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/birdnet_server.service /usr/lib/systemd/system systemctl enable birdnet_server.service } install_extraction_service() { - cat << EOF > /home/pi/BirdNET-Pi/templates/extraction.service + cat << EOF > $HOME/BirdNET-Pi/templates/extraction.service [Unit] Description=BirdNET BirdSound Extraction [Service] @@ -87,24 +85,24 @@ ExecStart=/usr/bin/env bash -c 'while true;do extract_new_birdsounds.sh;sleep 3; [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/extraction.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/extraction.service /usr/lib/systemd/system systemctl enable extraction.service } install_pushed_notifications() { - cat << EOF > /home/pi/BirdNET-Pi/templates/pushed_notifications.service + cat << EOF > $HOME/BirdNET-Pi/templates/pushed_notifications.service [Unit] Description=BirdNET-Pi Pushed.co Notifications [Service] Restart=on-success RestartSec=3 Type=simple -User=pi +User=$USER ExecStart=/usr/local/bin/species_notifier.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/pushed_notifications.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/pushed_notifications.service /usr/lib/systemd/system systemctl enable pushed_notifications.service } @@ -142,7 +140,7 @@ generate_BirdDB() { sudo -u ${USER} sed -i '1 i\Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap' $(dirname ${my_dir})/BirdDB.txt fi ln -sf $(dirname ${my_dir})/BirdDB.txt ${my_dir}/BirdDB.txt && - chown pi:pi ${my_dir}/BirdDB.txt && chmod g+rw ${my_dir}/BirdDB.txt + chown $USER:$USER ${my_dir}/BirdDB.txt && chmod g+rw ${my_dir}/BirdDB.txt } set_login() { @@ -159,7 +157,7 @@ EOF install_recording_service() { echo "Installing birdnet_recording.service" - cat << EOF > /home/pi/BirdNET-Pi/templates/birdnet_recording.service + cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_recording.service [Unit] Description=BirdNET Recording [Service] @@ -172,13 +170,13 @@ ExecStart=/usr/local/bin/birdnet_recording.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/birdnet_recording.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/birdnet_recording.service /usr/lib/systemd/system systemctl enable birdnet_recording.service } install_custom_recording_service() { echo "Installing custom_recording.service" - cat << EOF > /home/pi/BirdNET-Pi/templates/custom_recording.service + cat << EOF > $HOME/BirdNET-Pi/templates/custom_recording.service [Unit] Description=BirdNET Custom Recording [Service] @@ -191,7 +189,7 @@ ExecStart=/usr/local/bin/custom_recording.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/custom_recording.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/custom_recording.service /usr/lib/systemd/system } install_Caddyfile() { @@ -254,11 +252,11 @@ EOF fi systemctl enable caddy - usermod -aG pi caddy + usermod -aG $USER caddy } install_avahi_aliases() { - cat << 'EOF' > /home/pi/BirdNET-Pi/templates/avahi-alias@.service + cat << 'EOF' > $HOME/BirdNET-Pi/templates/avahi-alias@.service [Unit] Description=Publish %I as alias for %H.local via mdns After=network.target network-online.target @@ -271,12 +269,12 @@ ExecStart=/bin/bash -c "/usr/bin/avahi-publish -a -R %I $(hostname -I |cut -d' ' [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/avahi-alias@.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/avahi-alias@.service /usr/lib/systemd/system systemctl enable avahi-alias@"$(hostname)".local.service } install_birdnet_stats_service() { - cat << EOF > /home/pi/BirdNET-Pi/templates/birdnet_stats.service + cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_stats.service [Unit] Description=BirdNET Stats [Service] @@ -284,17 +282,17 @@ Restart=on-failure RestartSec=5 Type=simple User=${USER} -ExecStart=/home/pi/BirdNET-Pi/birdnet/bin/streamlit run /home/pi/BirdNET-Pi/scripts/plotly_streamlit.py --server.address localhost --server.baseUrlPath "/stats" +ExecStart=$HOME/BirdNET-Pi/birdnet/bin/streamlit run $HOME/BirdNET-Pi/scripts/plotly_streamlit.py --server.address localhost --server.baseUrlPath "/stats" [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/birdnet_stats.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/birdnet_stats.service /usr/lib/systemd/system systemctl enable birdnet_stats.service } install_spectrogram_service() { - cat << EOF > /home/pi/BirdNET-Pi/templates/spectrogram_viewer.service + cat << EOF > $HOME/BirdNET-Pi/templates/spectrogram_viewer.service [Unit] Description=BirdNET-Pi Spectrogram Viewer [Service] @@ -306,25 +304,25 @@ ExecStart=/usr/local/bin/spectrogram.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/spectrogram_viewer.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/spectrogram_viewer.service /usr/lib/systemd/system systemctl enable spectrogram_viewer.service } install_chart_viewer_service() { echo "Installing the chart_viewer.service" - cat << EOF > /home/pi/BirdNET-Pi/templates/chart_viewer.service + cat << EOF > $HOME/BirdNET-Pi/templates/chart_viewer.service [Unit] Description=BirdNET-Pi Chart Viewer Service [Service] Restart=always RestartSec=300 Type=simple -User=pi +User=$USER ExecStart=/usr/local/bin/daily_plot.py [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/chart_viewer.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/chart_viewer.service /usr/lib/systemd/system systemctl enable chart_viewer.service } @@ -333,7 +331,7 @@ install_gotty_logs() { ${HOME}/.gotty sudo -u ${USER} ln -sf $(dirname ${my_dir})/templates/bashrc \ ${HOME}/.bashrc - cat << EOF > /home/pi/BirdNET-Pi/templates/birdnet_log.service + cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_log.service [Unit] Description=BirdNET Analysis Log [Service] @@ -346,9 +344,9 @@ ExecStart=/usr/local/bin/gotty --address localhost -p 8080 -P log --title-format [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/birdnet_log.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/birdnet_log.service /usr/lib/systemd/system systemctl enable birdnet_log.service - cat << EOF > /home/pi/BirdNET-Pi/templates/web_terminal.service + cat << EOF > $HOME/BirdNET-Pi/templates/web_terminal.service [Unit] Description=BirdNET-Pi Web Terminal [Service] @@ -361,7 +359,7 @@ ExecStart=/usr/local/bin/gotty --address localhost -w -p 8888 -P terminal --titl [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/web_terminal.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/web_terminal.service /usr/lib/systemd/system systemctl enable web_terminal.service } @@ -394,7 +392,7 @@ config_icecast() { } install_livestream_service() { - cat << EOF > /home/pi/BirdNET-Pi/templates/livestream.service + cat << EOF > $HOME/BirdNET-Pi/templates/livestream.service [Unit] Description=BirdNET-Pi Live Stream After=network-online.target @@ -409,7 +407,7 @@ ExecStart=/usr/local/bin/livestream.sh [Install] WantedBy=multi-user.target EOF - ln -sf /home/pi/BirdNET-Pi/templates/livestream.service /usr/lib/systemd/system + ln -sf $HOME/BirdNET-Pi/templates/livestream.service /usr/lib/systemd/system systemctl enable livestream.service } diff --git a/scripts/overview.php b/scripts/overview.php index 9595a3f..4314303 100644 --- a/scripts/overview.php +++ b/scripts/overview.php @@ -6,7 +6,7 @@ header("refresh: 300;"); $myDate = date('Y-m-d'); $chart = "Combo-$myDate.png"; -$db = new SQLite3('/home/pi/BirdNET-Pi/scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); +$db = new SQLite3('/home/*/BirdNET-Pi/scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); if($db == False) { echo "Database is busy"; header("refresh: 0;"); @@ -109,7 +109,7 @@ body::-webkit-scrollbar {
"; } else { echo "

No Detections For Today

"; diff --git a/scripts/play.php b/scripts/play.php index a007341..334c23b 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/pi/BirdNET-Pi/scripts/birds.db', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); +$db = new SQLite3('/home/*/BirdNET-Pi/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 507d872..95b5f15 100755 --- a/scripts/plotly_streamlit.py +++ b/scripts/plotly_streamlit.py @@ -1,4 +1,3 @@ -#!/home/pi/BirdNET-Pi/birdnet/bin/python3 import streamlit as st import pandas as pd import numpy as np @@ -9,7 +8,7 @@ from pathlib import Path import sqlite3 from sqlite3 import Connection -URI_SQLITE_DB = "/home/pi/BirdNET-Pi/scripts/birds.db" +URI_SQLITE_DB = "/home/*/BirdNET-Pi/scripts/birds.db" st.set_page_config(layout='wide') @@ -34,7 +33,7 @@ st.markdown(""" col1,col2,col3 = st.columns([20,20,20]) col1.title('BirdNET-Pi', anchor=None) -col2.image('/home/pi/BirdNET-Pi/homepage/images/bird.png') +col2.image('/home/*/BirdNET-Pi/homepage/images/bird.png') col3.text('') @@ -46,7 +45,7 @@ def get_connection(path:str): # def load_data(): -# df1 = pd.read_csv('/home/pi/BirdNET-Pi/BirdDB.txt', sep=';') +# df1 = pd.read_csv('/home/*/BirdNET-Pi/BirdDB.txt', sep=';') # return df1 def get_data(conn: Connection): @@ -179,6 +178,6 @@ st.plotly_chart(fig, use_container_width=True) #, config=config) # # extract_date=Date_Slider # -# audio_file = open('/home/pi/BirdSongs/Extracted/By_Date/2022-03-22/Yellow-streaked_Greenbul/Yellow-streaked_Greenbul-77-2022-03-22-birdnet-15:04:28.mp3', 'rb') +# audio_file = open('/home/*/BirdSongs/Extracted/By_Date/2022-03-22/Yellow-streaked_Greenbul/Yellow-streaked_Greenbul-77-2022-03-22-birdnet-15:04:28.mp3', 'rb') # audio_bytes = audio_file.read() -# cols4.audio(audio_bytes, format='audio/mp3') \ No newline at end of file +# cols4.audio(audio_bytes, format='audio/mp3') diff --git a/scripts/privacy_server.py b/scripts/privacy_server.py index 85efa21..d98d1a1 100755 --- a/scripts/privacy_server.py +++ b/scripts/privacy_server.py @@ -1,4 +1,3 @@ -#!/home/pi/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os @@ -44,7 +43,7 @@ except: # Open most recent Configuration and grab DB_PWD as a python variable -with open('/home/pi/BirdNET-Pi/thisrun.txt', 'r') as f: +with open('/home/*/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]) @@ -59,7 +58,7 @@ def loadModel(): print('LOADING TF LITE MODEL...', end=' ') # Load TFLite model and allocate tensors. - myinterpreter = tflite.Interpreter(model_path='/home/pi/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) + myinterpreter = tflite.Interpreter(model_path='/home/*/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) myinterpreter.allocate_tensors() # Get input and output tensors. @@ -73,7 +72,7 @@ def loadModel(): # Load labels CLASSES = [] - with open('/home/pi/BirdNET-Pi/model/labels.txt', 'r') as lfile: + with open('/home/*/BirdNET-Pi/model/labels.txt', 'r') as lfile: for line in lfile.readlines(): CLASSES.append(line.replace('\n', '')) @@ -170,11 +169,11 @@ def predict(sample, sensitivity): if p_sorted[i][0]=='Human_Human': print("HUMAN SCORE:",str(p_sorted[i])) HUMAN_FLAG=True - with open('/home/pi/BirdNET-Pi/HUMAN.txt', 'a') as rfile: + with open('/home/*/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") # -# sf.write('./home/pi/human_sample.wav',np.random.randn(10,2) , 44100) #sample[0] +# sf.write('./home/*/human_sample.wav',np.random.randn(10,2) , 44100) #sample[0] # Only return first the top ten results #INCREASE THIS TO SEE IF HUMAN IS DETECTED MORE RELIABLY @@ -259,8 +258,8 @@ def handle_client(conn, addr): args = type('', (), {})() - args.i = '/home/pi/test.wav' - args.o = '/home/pi/test.wav.csv' + args.i = '/home/*/test.wav' + args.o = '/home/*/test.wav.csv' args.birdweather_id = '99999' args.include_list = 'null' args.exclude_list = 'null' @@ -355,7 +354,7 @@ def handle_client(conn, addr): myReturn += str(i) + '-' + str(detections[i][0]) + '\n' - with open('/home/pi/BirdNET-Pi/BirdDB.txt', 'a') as rfile: + with open('/home/*/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) ): @@ -381,7 +380,7 @@ def handle_client(conn, addr): #Connect to SQLite Database try: - con = sqlite3.connect('/home/pi/BirdNET-Pi/scripts/birds.db') + 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)) diff --git a/scripts/restart_services.sh b/scripts/restart_services.sh index cb5384b..2de8f0d 100755 --- a/scripts/restart_services.sh +++ b/scripts/restart_services.sh @@ -2,7 +2,7 @@ # Restarts ALL services and removes ALL unprocessed audio source /etc/birdnet/birdnet.conf set -x -my_dir=/home/pi/BirdNET-Pi/scripts +my_dir=$HOME/BirdNET-Pi/scripts sudo systemctl stop birdnet_server.service sudo pkill server.py diff --git a/scripts/server.py b/scripts/server.py index 6d0b129..aff7b3d 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -1,4 +1,3 @@ -#!/home/pi/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os @@ -44,7 +43,7 @@ except: # Open most recent Configuration and grab DB_PWD as a python variable -with open('/home/pi/BirdNET-Pi/thisrun.txt', 'r') as f: +with open('/home/*/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]) @@ -59,7 +58,7 @@ def loadModel(): print('LOADING TF LITE MODEL...', end=' ') # Load TFLite model and allocate tensors. - myinterpreter = tflite.Interpreter(model_path='/home/pi/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) + myinterpreter = tflite.Interpreter(model_path='/home/*/BirdNET-Pi/model/BirdNET_6K_GLOBAL_MODEL.tflite',num_threads=2) myinterpreter.allocate_tensors() # Get input and output tensors. @@ -73,7 +72,7 @@ def loadModel(): # Load labels CLASSES = [] - with open('/home/pi/BirdNET-Pi/model/labels.txt', 'r') as lfile: + with open('/home/*/BirdNET-Pi/model/labels.txt', 'r') as lfile: for line in lfile.readlines(): CLASSES.append(line.replace('\n', '')) @@ -233,8 +232,8 @@ def handle_client(conn, addr): args = type('', (), {})() - args.i = '/home/pi/test.wav' - args.o = '/home/pi/test.wav.csv' + args.i = '/home/*/test.wav' + args.o = '/home/*/test.wav.csv' args.birdweather_id = '99999' args.include_list = 'null' args.exclude_list = 'null' @@ -329,7 +328,7 @@ def handle_client(conn, addr): myReturn += str(i) + '-' + str(detections[i][0]) + '\n' - with open('/home/pi/BirdNET-Pi/BirdDB.txt', 'a') as rfile: + with open('/home/*/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) ): @@ -355,7 +354,7 @@ def handle_client(conn, addr): #Connect to SQLite Database try: - con = sqlite3.connect('/home/pi/BirdNET-Pi/scripts/birds.db') + 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)) diff --git a/scripts/species_notifier.sh b/scripts/species_notifier.sh index a7a01bc..9596754 100755 --- a/scripts/species_notifier.sh +++ b/scripts/species_notifier.sh @@ -10,7 +10,7 @@ lastcheck="$(mktemp)" cp ${IDFILE} ${lastcheck} -/home/pi/BirdNET-Pi/scripts/update_species.sh +$HOME/BirdNET-Pi/scripts/update_species.sh if ! diff ${IDFILE} ${lastcheck} &> /dev/null;then SPECIES=$(diff ${IDFILE} ${lastcheck} \ diff --git a/scripts/spectrogram.php b/scripts/spectrogram.php index e9d87bc..ca46f64 100644 --- a/scripts/spectrogram.php +++ b/scripts/spectrogram.php @@ -1,8 +1,8 @@ /dev/null SCRIPTS=($(ls -1 ${my_dir}) ${HOME}/.gotty) set -x diff --git a/scripts/update_birdnet.sh b/scripts/update_birdnet.sh index e8e83c4..970dd04 100755 --- a/scripts/update_birdnet.sh +++ b/scripts/update_birdnet.sh @@ -2,14 +2,12 @@ # Update BirdNET-Pi source /etc/birdnet/birdnet.conf trap 'exit 1' SIGINT SIGHUP -USER=pi -HOME=/home/pi my_dir=${HOME}/BirdNET-Pi/scripts -sudo -u${USER} git -C /home/pi/BirdNET-Pi stash -sudo -u${USER} git -C /home/pi/BirdNET-Pi pull -f +sudo -u${USER} git -C $my_dir/BirdNET-Pi stash +sudo -u${USER} git -C $my_dir/BirdNET-Pi pull -f sudo systemctl daemon-reload -sudo -u${USER} git -C /home/pi/BirdNET-Pi stash pop +sudo -u${USER} git -C $my_dir/BirdNET-Pi stash pop sudo ln -sf $my_dir/* /usr/local/bin/ if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf;then sudo -u${USER} echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf diff --git a/scripts/update_caddyfile.sh b/scripts/update_caddyfile.sh index c0f0e3e..4926d13 100755 --- a/scripts/update_caddyfile.sh +++ b/scripts/update_caddyfile.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash source /etc/birdnet/birdnet.conf -USER=pi -HOME=/home/pi -my_dir=/home/pi/BirdNET-Pi/scripts +my_dir=$HOME/BirdNET-Pi/scripts set -x [ -d /etc/caddy ] || mkdir /etc/caddy if [ -f /etc/caddy/Caddyfile ];then diff --git a/scripts/update_species.sh b/scripts/update_species.sh index eb59741..3989e73 100755 --- a/scripts/update_species.sh +++ b/scripts/update_species.sh @@ -2,4 +2,4 @@ # Update the species list #set -x source /etc/birdnet/birdnet.conf -sqlite3 /home/pi/BirdNET-Pi/scripts/birds.db "SELECT DISTINCT(Com_Name) FROM detections" | sort > ${IDFILE} +sqlite3 $HOME/BirdNET-Pi/scripts/birds.db "SELECT DISTINCT(Com_Name) FROM detections" | sort > ${IDFILE} diff --git a/scripts/write_config.sh b/scripts/write_config.sh index 15bfa31..6d66b2a 100755 --- a/scripts/write_config.sh +++ b/scripts/write_config.sh @@ -1,6 +1,6 @@ #!/usr/bin/bash # Writes variables to config file -birdnetpi_dir=/home/pi/BirdNET-Pi +birdnetpi_dir=$HOME/BirdNET-Pi birders_conf=${birdnetpi_dir}/Birders_Guide_Installer_Configuration.txt sed -i s/'^LATITUDE=$'/"LATITUDE=${new_lat}"/g ${birders_conf} sed -i s/'^LONGITUDE=$'/"LONGITUDE=${new_lon}"/g ${birders_conf} diff --git a/templates/bashrc b/templates/bashrc index f5a93a8..7c0a0d8 100644 --- a/templates/bashrc +++ b/templates/bashrc @@ -113,7 +113,8 @@ if ! shopt -oq posix; then fi cd ~/BirdNET-Pi function remove() { - find /home/pi/BirdSongs -iname *${1}* -exec rm -drfv {} + + source /etc/birdnet/birdnet.conf + find $RECS_DIR -iname *${1}* -exec rm -drfv {} + } alias rerc="source ~/.bashrc" alias vimrc="vim ~/.bashrc" diff --git a/templates/cleanup.cron b/templates/cleanup.cron index 42e5a26..4fb2fec 100644 --- a/templates/cleanup.cron +++ b/templates/cleanup.cron @@ -1,6 +1,6 @@ #birdnet -*/5 * * * * pi /usr/local/bin/disk_check.sh &> /dev/null +*/5 * * * * $USER /usr/local/bin/disk_check.sh &> /dev/null #birdnet -*/3 * * * * pi /usr/local/bin/cleanup.sh &> /dev/null +*/3 * * * * $USER /usr/local/bin/cleanup.sh &> /dev/null #birdnet -@reboot pi /usr/local/bin/cleanup.sh &> /dev/null +@reboot $USER /usr/local/bin/cleanup.sh &> /dev/null From a8e67410df82944932ff768561132e7b8f047974 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:24:44 -0400 Subject: [PATCH 02/38] Update newinstaller.sh --- newinstaller.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newinstaller.sh b/newinstaller.sh index 9e2f4a5..2e59544 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Simple new installer -branch=main +branch=newbaseos if ! which git &> /dev/null;then sudo apt update sudo apt -y install git From d4f247a1d3989f3a3dccbfca8f2aa142aa84f85c Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:28:35 -0400 Subject: [PATCH 03/38] Update newinstaller.sh --- newinstaller.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/newinstaller.sh b/newinstaller.sh index 2e59544..a3a352e 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -1,6 +1,12 @@ #!/usr/bin/env bash # Simple new installer +HOME=$HOME +USER=$USER + +export HOME=$HOME +export USER=$USER + branch=newbaseos if ! which git &> /dev/null;then sudo apt update From 61244b1463cb37ab9aa319e1115f3a8dc78af245 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:35:54 -0400 Subject: [PATCH 04/38] Update install_birdnet.sh --- scripts/install_birdnet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index 3dafad4..b62dee9 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -18,7 +18,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -sudo ./install_services.sh || exit 1 +HOME=$HOME USER=$USER sudo ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From 3d0f5200e5ec1a3a342673f29f6bbf51d96ce365 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:39:00 -0400 Subject: [PATCH 05/38] Update install_birdnet.sh --- scripts/install_birdnet.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index b62dee9..f1de326 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -3,7 +3,6 @@ set -x exec > >(tee -i installation-$(date +%F).txt) 2>&1 set -e # exit installation if anything fails -my_dir=$(realpath $(dirname $0)) trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT cd $my_dir || exit 1 From 3c4c0a9d2c4ba4e914592a4ec8132c0fa52ad2aa Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:40:10 -0400 Subject: [PATCH 06/38] Update newinstaller.sh --- newinstaller.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/newinstaller.sh b/newinstaller.sh index a3a352e..7219e4f 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -1,9 +1,10 @@ #!/usr/bin/env bash # Simple new installer - +my_dir=$(realpath $(dirname 0)) HOME=$HOME USER=$USER +export my_dir=$my_dir export HOME=$HOME export USER=$USER From 36c897e52b07c4150f1e9b86592934ff26c15801 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 10:44:07 -0400 Subject: [PATCH 07/38] Update install_config.sh --- scripts/install_config.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install_config.sh b/scripts/install_config.sh index a662534..857e40c 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -4,7 +4,6 @@ set -e trap 'exit 1' SIGINT SIGHUP -my_dir=$(realpath $(dirname $0)) birdnetpi_dir=$(realpath $(dirname $my_dir)) birdnet_conf="$(dirname ${my_dir})/birdnet.conf" From 2214319e034e569d1a80ee2e5add96f22016d9fb Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 10:49:16 -0400 Subject: [PATCH 08/38] adjustments --- newinstaller.sh | 2 -- scripts/install_birdnet.sh | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/newinstaller.sh b/newinstaller.sh index 7219e4f..d2b8c2d 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -1,10 +1,8 @@ #!/usr/bin/env bash # Simple new installer -my_dir=$(realpath $(dirname 0)) HOME=$HOME USER=$USER -export my_dir=$my_dir export HOME=$HOME export USER=$USER diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index f1de326..ee09b00 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -4,7 +4,7 @@ set -x exec > >(tee -i installation-$(date +%F).txt) 2>&1 set -e # exit installation if anything fails trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT -cd $my_dir || exit 1 +cd $my_dir/scripts || exit 1 if [ "$(uname -m)" != "aarch64" ];then echo "BirdNET-Pi requires a 64-bit OS. From 363ed212daa338f7ad254c2737de7d6a4682c1d4 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 11:03:53 -0400 Subject: [PATCH 09/38] Update install_birdnet.sh --- scripts/install_birdnet.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index ee09b00..db540d7 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -4,6 +4,7 @@ set -x exec > >(tee -i installation-$(date +%F).txt) 2>&1 set -e # exit installation if anything fails trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT +my_dir=$HOME/BirdNET-Pi cd $my_dir/scripts || exit 1 if [ "$(uname -m)" != "aarch64" ];then From 5fca0d37eb0083437056cbc5cc7f74077c0f6570 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 11:07:17 -0400 Subject: [PATCH 10/38] Update install_config.sh --- scripts/install_config.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 857e40c..42109f5 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -4,7 +4,6 @@ set -e trap 'exit 1' SIGINT SIGHUP -birdnetpi_dir=$(realpath $(dirname $my_dir)) birdnet_conf="$(dirname ${my_dir})/birdnet.conf" install_config() { @@ -169,4 +168,4 @@ fi chmod g+w ${birdnet_conf} [ -d /etc/birdnet ] || sudo mkdir /etc/birdnet sudo ln -sf $(dirname ${my_dir})/birdnet.conf /etc/birdnet/birdnet.conf -grep -ve '^#' -e '^$' /etc/birdnet/birdnet.conf > ${birdnetpi_dir}/firstrun.ini +grep -ve '^#' -e '^$' /etc/birdnet/birdnet.conf > $my_dir/firstrun.ini From 6f26443135c1d9009345593eff3d67a119129c85 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 11:07:56 -0400 Subject: [PATCH 11/38] Update install_birdnet.sh --- scripts/install_birdnet.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index db540d7..b058a4d 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -5,6 +5,7 @@ exec > >(tee -i installation-$(date +%F).txt) 2>&1 set -e # exit installation if anything fails trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT my_dir=$HOME/BirdNET-Pi +export my_dir=$my_dir cd $my_dir/scripts || exit 1 if [ "$(uname -m)" != "aarch64" ];then From 7e3d983274281e7701f05a2b08aec0c639fa18fa Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 11:12:09 -0400 Subject: [PATCH 12/38] Update install_birdnet.sh --- scripts/install_birdnet.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index b058a4d..ba2229d 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -6,6 +6,8 @@ set -e # exit installation if anything fails trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT my_dir=$HOME/BirdNET-Pi export my_dir=$my_dir +export HOME=$HOME +export USER=$USER cd $my_dir/scripts || exit 1 if [ "$(uname -m)" != "aarch64" ];then @@ -19,7 +21,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -HOME=$HOME USER=$USER sudo ./install_services.sh || exit 1 +sudo ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From b818bfd05b3e1f4b502ebcf757bc4f0ae496e807 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 11:16:13 -0400 Subject: [PATCH 13/38] Update install_services.sh --- scripts/install_services.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install_services.sh b/scripts/install_services.sh index 7b88bff..fee4e9c 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -3,7 +3,6 @@ set -x # Uncomment to enable debugging trap 'rm -f ${tmpfile}' EXIT trap 'exit 1' SIGINT SIGHUP -my_dir=$HOME/BirdNET-Pi/scripts tmpfile=$(mktemp) config_file="$(dirname ${my_dir})/birdnet.conf" From 5f6a6bcfe2d2541b7c298f5b59217977088aea43 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:20:52 -0400 Subject: [PATCH 14/38] my_dir=$HOME/BirdNET-Pi --- scripts/install_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 42109f5..92d133e 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -4,7 +4,7 @@ set -e trap 'exit 1' SIGINT SIGHUP -birdnet_conf="$(dirname ${my_dir})/birdnet.conf" +birdnet_conf=$my_dir/birdnet.conf install_config() { cat << EOF > $(dirname ${my_dir})/birdnet.conf From 0ab744887e995162ef6dd089f8370b3da3946e76 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:24:52 -0400 Subject: [PATCH 15/38] same --- scripts/install_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 92d133e..6e4e50e 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -167,5 +167,5 @@ if ! [ -f ${birdnet_conf} ];then fi chmod g+w ${birdnet_conf} [ -d /etc/birdnet ] || sudo mkdir /etc/birdnet -sudo ln -sf $(dirname ${my_dir})/birdnet.conf /etc/birdnet/birdnet.conf +sudo ln -sf $birdnet_conf /etc/birdnet/birdnet.conf grep -ve '^#' -e '^$' /etc/birdnet/birdnet.conf > $my_dir/firstrun.ini From c20d1ace9b142ce3de67f0ee168b2734f2a26eb4 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:30:24 -0400 Subject: [PATCH 16/38] ugh --- newinstaller.sh | 4 ++-- scripts/install_config.sh | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/newinstaller.sh b/newinstaller.sh index d2b8c2d..6b4dcda 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -11,9 +11,9 @@ if ! which git &> /dev/null;then sudo apt update sudo apt -y install git fi -git clone -b ${branch} https://github.com/mcguirepr89/BirdNET-Pi.git ${HOME}/BirdNET-Pi && +git clone -b $branch https://github.com/mcguirepr89/BirdNET-Pi.git ${HOME}/BirdNET-Pi && -${HOME}/BirdNET-Pi/scripts/install_birdnet.sh +$HOME/BirdNET-Pi/scripts/install_birdnet.sh if [ ${PIPESTATUS[0]} -eq 0 ];then echo "Installation completed successfully" sudo reboot diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 6e4e50e..2189430 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -1,9 +1,10 @@ #!/usr/bin/env bash # Creates and installs the /etc/birdnet/birdnet.conf file -#set -x # Uncomment to enable debugging +set -x # Uncomment to enable debugging set -e trap 'exit 1' SIGINT SIGHUP +echo "Beginning $0" birdnet_conf=$my_dir/birdnet.conf install_config() { From effd04228fd105f8fa0c4e5670ab36bccc8f9669 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:33:27 -0400 Subject: [PATCH 17/38] fixed bad install_config.sh --- scripts/install_config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 2189430..cbd29f1 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -8,7 +8,7 @@ echo "Beginning $0" birdnet_conf=$my_dir/birdnet.conf install_config() { - cat << EOF > $(dirname ${my_dir})/birdnet.conf + cat << EOF > $birdnet_conf ################################################################################ # Configuration settings for BirdNET-Pi # ################################################################################ From 4a760eff659667baad9739695ba494204b057b56 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:40:21 -0400 Subject: [PATCH 18/38] dirname to my_dir --- scripts/install_services.sh | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/scripts/install_services.sh b/scripts/install_services.sh index fee4e9c..41c9cf5 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -4,7 +4,7 @@ set -x # Uncomment to enable debugging trap 'rm -f ${tmpfile}' EXIT trap 'exit 1' SIGINT SIGHUP tmpfile=$(mktemp) -config_file="$(dirname ${my_dir})/birdnet.conf" +config_file=$my_dir/birdnet.conf install_depends() { curl -1sLf \ @@ -112,33 +112,33 @@ 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 $(dirname ${my_dir})/homepage/* ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/model/labels.txt ${my_dir} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/play.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/spectrogram.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/overview.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/stats.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/todays_detections.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/scripts/history.php ${EXTRACTED} - sudo -u ${USER} ln -fs $(dirname ${my_dir})/homepage/images/favicon.ico ${EXTRACTED} + 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/scripts ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/play.php ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/spectrogram.php ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/overview.php ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/stats.php ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/todays_detections.php ${EXTRACTED} + sudo -u ${USER} ln -fs $my_dir/scripts/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 $(dirname ${my_dir}) + sudo -u ${USER} ln -fs $my_dir/templates/phpsysinfo.ini ${HOME}/phpsysinfo/ + sudo -u ${USER} ln -fs $my_dir/templates/green_bootstrap.css ${HOME}/phpsysinfo/templates/ + sudo -u ${USER} ln -fs $my_dir/templates/index_bootstrap.html ${HOME}/phpsysinfo/templates/html + chmod -R g+rw $my_dir chmod -R g+rw ${RECS_DIR} } generate_BirdDB() { echo "Generating BirdDB.txt" - if ! [ -f $(dirname ${my_dir})/BirdDB.txt ];then - sudo -u ${USER} touch $(dirname ${my_dir})/BirdDB.txt - echo "Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap" | sudo -u ${USER} tee -a $(dirname ${my_dir})/BirdDB.txt - elif ! grep Date $(dirname ${my_dir})/BirdDB.txt;then - sudo -u ${USER} sed -i '1 i\Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap' $(dirname ${my_dir})/BirdDB.txt + if ! [ -f $my_dir/BirdDB.txt ];then + sudo -u ${USER} touch $my_dir/BirdDB.txt + echo "Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap" | sudo -u ${USER} tee -a $my_dir/BirdDB.txt + elif ! grep Date $my_dir/BirdDB.txt;then + sudo -u ${USER} sed -i '1 i\Date;Time;Sci_Name;Com_Name;Confidence;Lat;Lon;Cutoff;Week;Sens;Overlap' $my_dir/BirdDB.txt fi - ln -sf $(dirname ${my_dir})/BirdDB.txt ${my_dir}/BirdDB.txt && + ln -sf $my_dir/BirdDB.txt ${my_dir}/BirdDB.txt && chown $USER:$USER ${my_dir}/BirdDB.txt && chmod g+rw ${my_dir}/BirdDB.txt } @@ -326,9 +326,9 @@ EOF } install_gotty_logs() { - sudo -u ${USER} ln -sf $(dirname ${my_dir})/templates/gotty \ + sudo -u ${USER} ln -sf $my_dir/templates/gotty \ ${HOME}/.gotty - sudo -u ${USER} ln -sf $(dirname ${my_dir})/templates/bashrc \ + sudo -u ${USER} ln -sf $my_dir/templates/bashrc \ ${HOME}/.bashrc cat << EOF > $HOME/BirdNET-Pi/templates/birdnet_log.service [Unit] @@ -411,7 +411,7 @@ EOF } install_cleanup_cron() { - cat $(dirname ${my_dir})/templates/cleanup.cron >> /etc/crontab + cat $my_dir/templates/cleanup.cron >> /etc/crontab } install_services() { From 9ec4236af1f23f0df5f8f4869af02fda4a3a76de Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:46:24 -0400 Subject: [PATCH 19/38] trying export on same line --- scripts/install_birdnet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index ba2229d..d3ce87a 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -21,7 +21,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -sudo ./install_services.sh || exit 1 +export my_dir=$my_dir sudo ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From a8f9636b090376cadbcc1c284fc55ac2e959deaf Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:48:48 -0400 Subject: [PATCH 20/38] all on the same line actually --- scripts/install_birdnet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index d3ce87a..3b5734c 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -21,7 +21,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -export my_dir=$my_dir sudo ./install_services.sh || exit 1 +my_dir=$my_dir HOME=$HOME USER=$USER sudo ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From 95f8c72635329cd71791234553f58caedd322734 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 11:52:20 -0400 Subject: [PATCH 21/38] this should have been more obvious! But hey --- scripts/install_birdnet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index 3b5734c..bc1141b 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -21,7 +21,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -my_dir=$my_dir HOME=$HOME USER=$USER sudo ./install_services.sh || exit 1 +sudo -E ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From 536c8091e3f9c97c17cee87e1c7d00da56957083 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 12:00:20 -0400 Subject: [PATCH 22/38] specifying USER and HOME for sudo --- scripts/install_birdnet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index bc1141b..b586928 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -21,7 +21,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -sudo -E ./install_services.sh || exit 1 +HOME=$HOME USER=$USER sudo -E ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From 153bfc96c300366ef9fbd9b21d3901763c9b2b0f Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 12:05:49 -0400 Subject: [PATCH 23/38] fixed a few paths --- scripts/install_services.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install_services.sh b/scripts/install_services.sh index 41c9cf5..e09d667 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -31,7 +31,7 @@ update_etc_hosts() { } install_scripts() { - ln -sf ${my_dir}/* /usr/local/bin/ + ln -sf ${my_dir}/scripts/* /usr/local/bin/ } install_birdnet_analysis() { @@ -441,7 +441,7 @@ install_services() { generate_BirdDB configure_caddy_php config_icecast - ${my_dir}/createdb.sh + ${my_dir}/scripts/createdb.sh } if [ -f ${config_file} ];then From dde349b969e29333639de8df2ca6b1c01be440f8 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 12:14:36 -0400 Subject: [PATCH 24/38] this works now --- scripts/install_birdnet.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index b586928..581aec8 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -1,13 +1,12 @@ #!/usr/bin/env bash # Install BirdNET script -set -x -exec > >(tee -i installation-$(date +%F).txt) 2>&1 +set -x # Debugging +exec > >(tee -i installation-$(date +%F).txt) 2>&1 # Make log set -e # exit installation if anything fails -trap '${my_dir}/dump_logs.sh && echo -e "\n\nExiting the installation. Goodbye!" && exit 1' SIGINT + my_dir=$HOME/BirdNET-Pi export my_dir=$my_dir -export HOME=$HOME -export USER=$USER + cd $my_dir/scripts || exit 1 if [ "$(uname -m)" != "aarch64" ];then @@ -21,7 +20,7 @@ fi #Install/Configure /etc/birdnet/birdnet.conf ./install_config.sh || exit 1 -HOME=$HOME USER=$USER sudo -E ./install_services.sh || exit 1 +sudo -E HOME=$HOME USER=$USER ./install_services.sh || exit 1 source /etc/birdnet/birdnet.conf install_birdnet() { From b818e3e194f04fe897370da495cd51376113380d Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 12:22:25 -0400 Subject: [PATCH 25/38] Update requirements.txt --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ec07c81..9f651b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,5 @@ pytz tzlocal pandas seaborn -babel streamlit plotly From 9319b1b55c29bebae4f26c351fca4de9e59780a6 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 12:33:00 -0400 Subject: [PATCH 26/38] USER exported to createdb.sh --- scripts/createdb.sh | 4 ++-- scripts/install_services.sh | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/createdb.sh b/scripts/createdb.sh index 2ea002f..920fe23 100755 --- a/scripts/createdb.sh +++ b/scripts/createdb.sh @@ -16,5 +16,5 @@ CREATE TABLE IF NOT EXISTS detections ( Overlap FLOAT, File_Name VARCHAR(100) NOT NULL); EOF -sudo chown $USER:$USER $HOME/BirdNET-Pi/scripts/birds.db -sudo chmod g+w $HOME/BirdNET-Pi/scripts/birds.db +chown $USER:$USER $HOME/BirdNET-Pi/scripts/birds.db +chmod g+w $HOME/BirdNET-Pi/scripts/birds.db diff --git a/scripts/install_services.sh b/scripts/install_services.sh index e09d667..891ef91 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -4,7 +4,10 @@ set -x # Uncomment to enable debugging trap 'rm -f ${tmpfile}' EXIT trap 'exit 1' SIGINT SIGHUP tmpfile=$(mktemp) + config_file=$my_dir/birdnet.conf +export USER=$USER +export HOME=$HOME install_depends() { curl -1sLf \ @@ -441,7 +444,7 @@ install_services() { generate_BirdDB configure_caddy_php config_icecast - ${my_dir}/scripts/createdb.sh + USER=$USER HOME=$HOME ${my_dir}/scripts/createdb.sh } if [ -f ${config_file} ];then From 6495284d21c64a286eb6d639dc767f92b92d91d4 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 13:12:49 -0400 Subject: [PATCH 27/38] adds shebang to python scripts --- scripts/install_birdnet.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/install_birdnet.sh b/scripts/install_birdnet.sh index 581aec8..daeb65d 100755 --- a/scripts/install_birdnet.sh +++ b/scripts/install_birdnet.sh @@ -29,6 +29,8 @@ install_birdnet() { python3 -m venv birdnet source ./birdnet/bin/activate pip3 install -U -r $HOME/BirdNET-Pi/requirements.txt + echo "Ensure all python scripts use the virtual environment" + sed -si "1 i\\#\!$HOME/BirdNET-Pi/birdnet/bin/python3" $my_dir/scripts/*.py } [ -d ${RECS_DIR} ] || mkdir -p ${RECS_DIR} &> /dev/null From f69f04d19dbd06bd2e830c92afca064c8dd34039 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 17:29:00 -0400 Subject: [PATCH 28/38] 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;"); From ebe5fae82bbf7cb8853c27bf9ea2174ca924d57a Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 11 Apr 2022 20:12:22 -0400 Subject: [PATCH 29/38] email templates fixed --- scripts/birdnetpi_request.php | 2 +- scripts/birdweather_request.php | 2 +- scripts/config.php | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/birdnetpi_request.php b/scripts/birdnetpi_request.php index 0cf7a5a..968c174 100644 --- a/scripts/birdnetpi_request.php +++ b/scripts/birdnetpi_request.php @@ -4,7 +4,7 @@ if (file_exists('thisrun.txt')) { } elseif (file_exists('firstrun.ini')) { $config = parse_ini_file('firstrun.ini'); } -$template = file_get_contents("email_template2"); +$template = file_get_contents("./scripts/email_template2"); foreach($config as $key => $value) { diff --git a/scripts/birdweather_request.php b/scripts/birdweather_request.php index fa4f6f3..a8b82ab 100644 --- a/scripts/birdweather_request.php +++ b/scripts/birdweather_request.php @@ -4,7 +4,7 @@ if (file_exists('thisrun.txt')) { } elseif (file_exists('firstrun.ini')) { $config = parse_ini_file('firstrun.ini'); } -$template = file_get_contents("email_template"); +$template = file_get_contents("./scripts/email_template"); foreach($config as $key => $value) { diff --git a/scripts/config.php b/scripts/config.php index 7f78a15..817f949 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -31,8 +31,12 @@ fwrite($fh2, $contents2); $language = $_POST["language"]; if ($language != "none"){ - $command = "sudo -upi mv /home/*/BirdNET-Pi/model/labels.txt /home/*/BirdNET-Pi/model/labels.txt.old && sudo -upi unzip /home/*/BirdNET-Pi/model/labels_l18n.zip $language -d /home/*/BirdNET-Pi/model && sudo -upi mv /home/*/BirdNET-Pi/model/$language /home/*/BirdNET-Pi/model/labels.txt"; - $command_output = `$command`; + $user = shell_exec("awk -F: '/1000/{print $1}' /etc/passwd"); + $home = shell_exec("awk -F: '/1000/{print $6}' /etc/passwd"); + $home = trim($home); + $command = "sudo -u".$user." mv ".$home."/BirdNET-Pi/model/labels.txt ".$home."/BirdNET-Pi/model/labels.txt.old && sudo -u".$user." unzip ".$home."/BirdNET-Pi/model/labels_l18n.zip ".$language." -d ".$home."/BirdNET-Pi/model && sudo -u".$user." mv ".$home."/BirdNET-Pi/model/".$language." ".$home."/BirdNET-Pi/model/labels.txt"; + $command_output = `sudo $command`; + `sudo restart_services.sh`; } } @@ -75,7 +79,7 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

Set your Latitude and Longitude to 4 decimal places. Get your coordinates here.


-

BirdWeather.com is a weather map for bird sounds. Stations around the world supply audio and video streams to BirdWeather where they are then analyzed by BirdNET and compared to eBird Grid data. BirdWeather catalogues the bird audio and spectrogram visualizations so that you can listen to, view, and read about birds throughout the world. Email Tim to request a BirdWeather ID

+

BirdWeather.com is a weather map for bird sounds. Stations around the world supply audio and video streams to BirdWeather where they are then analyzed by BirdNET and compared to eBird Grid data. BirdWeather catalogues the bird audio and spectrogram visualizations so that you can listen to, view, and read about birds throughout the world. Email Tim to request a BirdWeather ID


From 9aaa66c7e790031eb719aa6e0ac39dcd56780f5e Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 11 Apr 2022 20:27:39 -0400 Subject: [PATCH 30/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fec95a3..e4066d8 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ The installer takes care of any and all necessary updates, so you can run that a The installation creates a log in `/home/pi/installation.log` that you can [email me](mailto:mcguirepr89@gmail.com) if you encounter any issues during installation. ## Access -The BirdNET-Pi system can be accessed from any web browser on the same network: +The BirdNET-Pi can be accessed from any web browser on the same network: - http://birdnetpi.local - Default Basic Authentication Username: birdnet - Password is empty by default. Set this in "Tools" > "Settings" > "Advanced Settings" From 5664e052ad88030aefec5289a9335ae78809b297 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Tue, 12 Apr 2022 08:14:53 -0400 Subject: [PATCH 31/38] different way of installing the crontab to use dynamic user --- scripts/install_services.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_services.sh b/scripts/install_services.sh index 9ae5912..8ef7cff 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -417,7 +417,7 @@ EOF } install_cleanup_cron() { - cat $my_dir/templates/cleanup.cron >> /etc/crontab + sed "s/\$USER/$USER/g" $my_dir/templates/cleanup.cron >> /etc/crontab } install_services() { From 99f5b39822b002c38a8d5b6eb42a3000f8bc205b Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Tue, 12 Apr 2022 10:10:38 -0400 Subject: [PATCH 32/38] clear_all_data warning --- scripts/system_controls.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system_controls.php b/scripts/system_controls.php index 0339142..cf48963 100644 --- a/scripts/system_controls.php +++ b/scripts/system_controls.php @@ -7,12 +7,12 @@
- +
- +
From 384fd91a1e031aea218c2ecac246da28e20b5a4b Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:04:17 -0400 Subject: [PATCH 33/38] Update analyze.py --- scripts/analyze.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/analyze.py b/scripts/analyze.py index 67fd742..4f36e80 100755 --- a/scripts/analyze.py +++ b/scripts/analyze.py @@ -1,4 +1,3 @@ -#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import argparse import socket From 78080d46ee07e3fb694c2c31b5305bf96a21de6a Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:04:39 -0400 Subject: [PATCH 34/38] Update daily_plot.py --- scripts/daily_plot.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/daily_plot.py b/scripts/daily_plot.py index 0707fb0..6762393 100755 --- a/scripts/daily_plot.py +++ b/scripts/daily_plot.py @@ -1,4 +1,3 @@ -#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import sqlite3 import os import configparser From ccd305f7f63a9a3e6946ee48a1e5d19d00c1d9c1 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:05:07 -0400 Subject: [PATCH 35/38] Update plotly_streamlit.py --- scripts/plotly_streamlit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/plotly_streamlit.py b/scripts/plotly_streamlit.py index 3a8ca8f..b42906d 100755 --- a/scripts/plotly_streamlit.py +++ b/scripts/plotly_streamlit.py @@ -1,4 +1,3 @@ -#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import os import streamlit as st import pandas as pd From 03dc0b70362497c2004b88625906499afd6c8238 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:05:37 -0400 Subject: [PATCH 36/38] Update privacy_server.py --- scripts/privacy_server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/privacy_server.py b/scripts/privacy_server.py index d5b6ca1..15a5672 100755 --- a/scripts/privacy_server.py +++ b/scripts/privacy_server.py @@ -1,4 +1,3 @@ -#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os From 1152f0ad485427e3d65487b6102ed155650d9675 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 11:05:56 -0400 Subject: [PATCH 37/38] Update server.py --- scripts/server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/server.py b/scripts/server.py index 21c7554..0746b88 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -1,4 +1,3 @@ -#!/home/patrick/BirdNET-Pi/birdnet/bin/python3 import socket import threading import os From cc66a8aff3d749689bc896217f0b3d484a0d8146 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Tue, 12 Apr 2022 14:01:33 -0400 Subject: [PATCH 38/38] Update newinstaller.sh --- newinstaller.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newinstaller.sh b/newinstaller.sh index 6b4dcda..64fa222 100644 --- a/newinstaller.sh +++ b/newinstaller.sh @@ -6,7 +6,7 @@ USER=$USER export HOME=$HOME export USER=$USER -branch=newbaseos +branch=main if ! which git &> /dev/null;then sudo apt update sudo apt -y install git