mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-11 10:21:02 +01:00
Replace birdnet-pi with BattyBirdNET-Analyzer
This commit is contained in:
@@ -25,8 +25,8 @@ ENV DEBIAN_FRONTEND="noninteractive" \
|
||||
PGID=1000 \
|
||||
HOME="/home/pi" \
|
||||
XDG_RUNTIME_DIR="/run/user/1000" \
|
||||
PYTHON_VIRTUAL_ENV="/home/pi/BirdNET-Pi/birdnet/bin/python3" \
|
||||
my_dir=/home/pi/BirdNET-Pi/scripts
|
||||
PYTHON_VIRTUAL_ENV="/home/pi/BattyBirdNET-Analyzer/birdnet/bin/python3" \
|
||||
my_dir=/home/pi/BattyBirdNET-Analyzer/scripts
|
||||
|
||||
# Global LSIO modifications
|
||||
ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_lsio.sh" "/ha_lsio.sh"
|
||||
@@ -58,7 +58,7 @@ RUN \
|
||||
git config --global --add safe.directory '*' && \
|
||||
\
|
||||
# Download installer
|
||||
curl -f -L -s -S "https://raw.githubusercontent.com/rdz-oss/BattyBirdNET-Pi/main/newinstaller.sh" -o /newinstaller.sh && \
|
||||
curl -f -L -s -S "https://raw.githubusercontent.com/rdz-oss/BattyBattyBirdNET-Analyzer/main/newinstaller.sh" -o /newinstaller.sh && \
|
||||
chmod 777 /newinstaller.sh && \
|
||||
\
|
||||
# Use installer to modify other scripts
|
||||
@@ -67,10 +67,10 @@ RUN \
|
||||
sed -i "1a /./newinstallermod.sh" /newinstaller.sh && \
|
||||
echo '#!/bin/bash' >> /newinstallermod.sh && \
|
||||
# Remove all instances of sudo from all other scripts
|
||||
echo 'for file in $(grep -srl "sudo" $HOME/BirdNET-Pi/scripts); do sed -i "s|sudo ||" "$file"; done' >> /newinstallermod.sh && \
|
||||
echo 'for file in $(grep -srl "my_dir" $HOME/BirdNET-Pi/scripts); do sed -i "s|\$my_dir|/config|" "$file"; done' >> /newinstallermod.sh && \
|
||||
echo 'for file in $(grep -srl "sudo" $HOME/BattyBirdNET-Analyzer/scripts); do sed -i "s|sudo ||" "$file"; done' >> /newinstallermod.sh && \
|
||||
echo 'for file in $(grep -srl "my_dir" $HOME/BattyBirdNET-Analyzer/scripts); do sed -i "s|\$my_dir|/config|" "$file"; done' >> /newinstallermod.sh && \
|
||||
# Disable pulseaudio
|
||||
echo 'for file in $(grep -srl "pulseaudio --start" $HOME/BirdNET-Pi/scripts); do sed -i "/pulseaudio --start/d" "$file"; done' >> /newinstallermod.sh && \
|
||||
echo 'for file in $(grep -srl "pulseaudio --start" $HOME/BattyBirdNET-Analyzer/scripts); do sed -i "/pulseaudio --start/d" "$file"; done' >> /newinstallermod.sh && \
|
||||
# Set permission
|
||||
chmod +x /newinstallermod.sh && \
|
||||
\
|
||||
|
||||
@@ -12,10 +12,10 @@ done
|
||||
chown caddy:caddy /run/php/php*-fpm.sock
|
||||
sed -i "s|/run/php/php-fpm.sock|$sockfile|g" /helpers/caddy_ingress.sh
|
||||
sed -i "s|/run/php/php-fpm.sock|$sockfile|g" /etc/caddy/Caddyfile
|
||||
sed -i "s|/run/php/php-fpm.sock|$sockfile|g" "$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh
|
||||
sed -i "s|/run/php/php-fpm.sock|$sockfile|g" "$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh
|
||||
|
||||
# Update caddyfile with password
|
||||
/."$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh &>/dev/null || true
|
||||
/."$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh &>/dev/null || true
|
||||
|
||||
echo "Starting service: caddy"
|
||||
/usr/bin/caddy run --config /etc/caddy/Caddyfile
|
||||
|
||||
@@ -28,7 +28,7 @@ chmod -R 755 "$ingest_dir"
|
||||
|
||||
function apprisealert() {
|
||||
# Set failed check so it only runs once
|
||||
touch "$HOME"/BirdNET-Pi/failed_servicescheck
|
||||
touch "$HOME"/BattyBirdNET-Analyzer/failed_servicescheck
|
||||
NOTIFICATION=""
|
||||
STOPPEDSERVICE="<br><b>Stopped services:</b> "
|
||||
services=(birdnet_analysis
|
||||
@@ -49,10 +49,10 @@ function apprisealert() {
|
||||
NOTIFICATION+="<br><b>System:</b> ${SITE_NAME:-$(hostname)}"
|
||||
NOTIFICATION+="<br>Available disk space: $(df -h "$(readlink -f "$HOME/BirdSongs")" | awk 'NR==2 {print $4}')"
|
||||
if [ -n "$BIRDNETPI_URL" ]; then
|
||||
NOTIFICATION+="<br> <a href=\"$BIRDNETPI_URL\">Access your battybirdnet-pi</a>"
|
||||
NOTIFICATION+="<br> <a href=\"$BIRDNETPI_URL\">Access your battyBattyBirdNET-Analyzer</a>"
|
||||
fi
|
||||
TITLE="BirdNET-Analyzer stopped"
|
||||
"$HOME"/BirdNET-Pi/birdnet/bin/apprise -vv -t "$TITLE" -b "${NOTIFICATION}" --input-format=html --config="$HOME/BirdNET-Pi/apprise.txt"
|
||||
"$HOME"/BattyBirdNET-Analyzer/birdnet/bin/apprise -vv -t "$TITLE" -b "${NOTIFICATION}" --input-format=html --config="$HOME/BattyBirdNET-Analyzer/apprise.txt"
|
||||
}
|
||||
|
||||
while true; do
|
||||
@@ -65,7 +65,7 @@ while true; do
|
||||
latest="$(cat "$ingest_dir"/analyzing_now.txt)"
|
||||
if [[ "$latest" == "$analyzing_now" ]]; then
|
||||
echo "$(date) WARNING no change in analyzing_now for 10 iterations, restarting services"
|
||||
/."$HOME"/BirdNET-Pi/scripts/restart_services.sh
|
||||
/."$HOME"/BattyBirdNET-Analyzer/scripts/restart_services.sh
|
||||
fi
|
||||
counter=10
|
||||
analyzing_now=$(cat "$ingest_dir"/analyzing_now.txt)
|
||||
@@ -83,7 +83,7 @@ while true; do
|
||||
bashio::log.red "$(date) WARNING too many files in queue, pausing $srv"
|
||||
sudo systemctl stop "$srv"
|
||||
sudo systemctl restart birdnet_analysis
|
||||
if [ -s "$HOME/BirdNET-Pi/apprise.txt" ]; then apprisealert; fi
|
||||
if [ -s "$HOME/BattyBirdNET-Analyzer/apprise.txt" ]; then apprisealert; fi
|
||||
elif [[ "$state" != "active" ]]; then
|
||||
bashio::log.yellow "$(date) INFO started $srv service"
|
||||
sudo systemctl start $srv
|
||||
|
||||
@@ -13,7 +13,7 @@ bashio::log.info "Ensuring the file structure is correct :"
|
||||
echo "... creating default files"
|
||||
touch /config/include_species_list.txt # Should be null
|
||||
for files in apprise.txt exclude_species_list.txt IdentifiedSoFar.txt disk_check_exclude.txt confirmed_species_list.txt blacklisted_images.txt whitelist_species_list.txt; do
|
||||
if [ ! -f /config/"$files" ]; then
|
||||
if [ ! -f /config/"$files" ]; then
|
||||
echo "" > /config/"$files"
|
||||
fi
|
||||
done
|
||||
@@ -58,22 +58,22 @@ chown -R pi:pi /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
||||
chmod -R 755 /config /config /etc/birdnet "$BIRDSONGS_FOLDER" /tmp
|
||||
|
||||
# Save default birdnet.conf to perform sanity check
|
||||
cp "$HOME"/BirdNET-Pi/birdnet.conf "$HOME"/BirdNET-Pi/birdnet.bak
|
||||
cp "$HOME"/BattyBirdNET-Analyzer/birdnet.conf "$HOME"/BattyBirdNET-Analyzer/birdnet.bak
|
||||
|
||||
# Symlink files
|
||||
echo "... creating symlink"
|
||||
for files in "$HOME/BirdNET-Pi/birdnet.conf" "$HOME/BirdNET-Pi/scripts/whitelist_species_list.txt" "$HOME/BirdNET-Pi/blacklisted_images.txt" "$HOME/BirdNET-Pi/scripts/birds.db" "$HOME/BirdNET-Pi/BirdDB.txt" "$HOME/BirdNET-Pi/scripts/disk_check_exclude.txt" "$HOME/BirdNET-Pi/apprise.txt" "$HOME/BirdNET-Pi/exclude_species_list.txt" "$HOME/BirdNET-Pi/include_species_list.txt" "$HOME/BirdNET-Pi/IdentifiedSoFar.txt" "$HOME/BirdNET-Pi/scripts/confirmed_species_list.txt"; do
|
||||
for files in "$HOME/BattyBirdNET-Analyzer/birdnet.conf" "$HOME/BattyBirdNET-Analyzer/scripts/whitelist_species_list.txt" "$HOME/BattyBirdNET-Analyzer/blacklisted_images.txt" "$HOME/BattyBirdNET-Analyzer/scripts/birds.db" "$HOME/BattyBirdNET-Analyzer/BirdDB.txt" "$HOME/BattyBirdNET-Analyzer/scripts/disk_check_exclude.txt" "$HOME/BattyBirdNET-Analyzer/apprise.txt" "$HOME/BattyBirdNET-Analyzer/exclude_species_list.txt" "$HOME/BattyBirdNET-Analyzer/include_species_list.txt" "$HOME/BattyBirdNET-Analyzer/IdentifiedSoFar.txt" "$HOME/BattyBirdNET-Analyzer/scripts/confirmed_species_list.txt"; do
|
||||
filename="${files##*/}"
|
||||
if [ ! -f /config/"$filename" ]; then
|
||||
if [ -f "$files" ]; then
|
||||
if [ -f "$files" ]; then
|
||||
echo "... copying $filename" && sudo -u pi mv "$files" /config/
|
||||
else
|
||||
touch /config/"$filename"
|
||||
fi
|
||||
fi
|
||||
if [ -e "$files" ]; then rm "$files"; fi
|
||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BirdNET-Pi/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BirdNET-Pi/scripts/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BattyBirdNET-Analyzer/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
||||
sudo -u pi ln -fs /config/"$filename" "$HOME/BattyBirdNET-Analyzer/scripts/$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
||||
sudo -u pi ln -fs /config/"$filename" /etc/birdnet/"$filename" || bashio::log.fatal "Symlink creation failed for $filename"
|
||||
done
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ echo " "
|
||||
bashio::log.info "Checking your birndet.conf file integrity"
|
||||
|
||||
# Set variables
|
||||
configcurrent="$HOME"/BirdNET-Pi/birdnet.conf
|
||||
configtemplate="$HOME"/BirdNET-Pi/birdnet.bak
|
||||
configcurrent="$HOME"/BattyBirdNET-Analyzer/birdnet.conf
|
||||
configtemplate="$HOME"/BattyBirdNET-Analyzer/birdnet.bak
|
||||
|
||||
# Extract variable names from config template and read each one
|
||||
grep -o '^[^#=]*=' "$configtemplate" | sed 's/=//' | while read -r var; do
|
||||
|
||||
@@ -12,15 +12,15 @@ common_steps () {
|
||||
sed -i "s|%%mqtt_port%%|$MQTT_PORT|g" /helpers/birdnet_to_mqtt.py
|
||||
sed -i "s|%%mqtt_user%%|$MQTT_USER|g" /helpers/birdnet_to_mqtt.py
|
||||
sed -i "s|%%mqtt_pass%%|$MQTT_PASS|g" /helpers/birdnet_to_mqtt.py
|
||||
|
||||
|
||||
# Copy script to the appropriate directory
|
||||
cp /helpers/birdnet_to_mqtt.py "$HOME"/BirdNET-Pi/scripts/utils/birdnet_to_mqtt.py
|
||||
chown pi:pi "$HOME"/BirdNET-Pi/scripts/utils/birdnet_to_mqtt.py
|
||||
chmod +x "$HOME"/BirdNET-Pi/scripts/utils/birdnet_to_mqtt.py
|
||||
|
||||
cp /helpers/birdnet_to_mqtt.py "$HOME"/BattyBirdNET-Analyzer/scripts/utils/birdnet_to_mqtt.py
|
||||
chown pi:pi "$HOME"/BattyBirdNET-Analyzer/scripts/utils/birdnet_to_mqtt.py
|
||||
chmod +x "$HOME"/BattyBirdNET-Analyzer/scripts/utils/birdnet_to_mqtt.py
|
||||
|
||||
# Add hooks to the main analysis script
|
||||
sed -i "/load_global_model, run_analysis/a from utils.birdnet_to_mqtt import automatic_mqtt_publish" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i '/write_to_db(/a\ automatic_mqtt_publish(file, detection, os.path.basename(detection.file_name_extr))' "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/load_global_model, run_analysis/a from utils.birdnet_to_mqtt import automatic_mqtt_publish" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i '/write_to_db(/a\ automatic_mqtt_publish(file, detection, os.path.basename(detection.file_name_extr))' "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
else
|
||||
bashio::log.fatal "MQTT connection failed, it will not be configured. Error message :"
|
||||
mosquitto_pub -h "$MQTT_HOST" -p "$MQTT_PORT" -t "$TOPIC" -m "test" -u "$MQTT_USER" -P "$MQTT_PASS" -q 1 -d --will-topic "$TOPIC" --will-payload "Disconnected" --will-qos 1 --will-retain
|
||||
@@ -30,7 +30,7 @@ common_steps () {
|
||||
# Check if MQTT service is available and not disabled
|
||||
if bashio::services.available 'mqtt' && ! bashio::config.true 'MQTT_DISABLED'; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.blue "MQTT addon is active on your system! Birdnet-pi is now automatically configured to send its output to MQTT"
|
||||
bashio::log.blue "MQTT addon is active on your system! BattyBirdNET-Analyzer is now automatically configured to send its output to MQTT"
|
||||
bashio::log.blue "MQTT user : $(bashio::services "mqtt" "username")"
|
||||
bashio::log.blue "MQTT password : $(bashio::services "mqtt" "password")"
|
||||
bashio::log.blue "MQTT broker : tcp://$(bashio::services "mqtt" "host"):$(bashio::services "mqtt" "port")"
|
||||
@@ -52,7 +52,7 @@ if bashio::services.available 'mqtt' && ! bashio::config.true 'MQTT_DISABLED'; t
|
||||
elif bashio::config.has_value "MQTT_HOST_manual" && bashio::config.has_value "MQTT_PORT_manual"; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.blue "MQTT is manually configured in the addon options"
|
||||
bashio::log.blue "Birdnet-pi is now automatically configured to send its output to MQTT"
|
||||
bashio::log.blue "BattyBirdNET-Analyzer is now automatically configured to send its output to MQTT"
|
||||
bashio::log.green "---"
|
||||
bashio::log.blue "Data will be posted to the topic : 'birdnet'"
|
||||
bashio::log.blue "Json data : {'Date', 'Time', 'ScientificName', 'CommonName', 'Confidence', 'SpeciesCode', 'ClipName', 'url'}"
|
||||
|
||||
@@ -11,53 +11,53 @@ bashio::log.info "Adding optional features"
|
||||
|
||||
# Denoiser
|
||||
#if bashio::config.true "DENOISER_ANALYSIS_ENABLED"; then
|
||||
# sed -i "s|ar 48000|ar 48000 -af \"arnndn=m=sample.rnnn\"|g" "$HOME"/BirdNET-Pi/scripts/birdnet_recording.sh
|
||||
# sed -i "s|ar 48000|ar 48000 -af afftdn=nr=30:nt=w:om=o|g" "$HOME"/BirdNET-Pi/scripts/birdnet_recording.sh
|
||||
# sed -i "s|ar 48000|ar 48000 -af \"arnndn=m=sample.rnnn\"|g" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_recording.sh
|
||||
# sed -i "s|ar 48000|ar 48000 -af afftdn=nr=30:nt=w:om=o|g" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_recording.sh
|
||||
#fi
|
||||
|
||||
# Enable the Processed folder
|
||||
#############################
|
||||
|
||||
if bashio::config.true "PROCESSED_FOLDER_ENABLED" && ! grep -q "processed_size" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py; then
|
||||
if bashio::config.true "PROCESSED_FOLDER_ENABLED" && ! grep -q "processed_size" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py; then
|
||||
echo "... Enabling the Processed folder : the last 15 wav files will be stored there"
|
||||
# Adapt config.php
|
||||
sed -i "/GET\[\"info_site\"\]/a\ \$processed_size = \$_GET\[\"processed_size\"\];" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\$contents = file_get_contents/a\ \$contents = preg_replace\(\"/PROCESSED_SIZE=\.\*/\", \"PROCESSED_SIZE=\$processed_size\", \$contents\);" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i <table class=\"settingstable\"><tr><td>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i <h2>Processed folder management </h2>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i <label for=\"processed_size\">Amount of files to keep after analysis :</label>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i <input name=\"processed_size\" type=\"number\" style=\"width:6em;\" max=\"90\" min=\"0\" step=\"1\" value=\"<\?php print(\$config\['PROCESSED_SIZE'\]);?>\"/>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i </td></tr><tr><td>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i Processed is the directory where the formerly 'Analyzed' files are moved after extractions, mostly for troubleshooting purposes.<br>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i This value defines the maximum amount of files that are kept before replacement with new files.<br>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i </td></tr></table>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/\"success\"/i\ <br>" "$HOME"/BirdNET-Pi/scripts/config.php
|
||||
sed -i "/GET\[\"info_site\"\]/a\ \$processed_size = \$_GET\[\"processed_size\"\];" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\$contents = file_get_contents/a\ \$contents = preg_replace\(\"/PROCESSED_SIZE=\.\*/\", \"PROCESSED_SIZE=\$processed_size\", \$contents\);" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i <table class=\"settingstable\"><tr><td>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i <h2>Processed folder management </h2>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i <label for=\"processed_size\">Amount of files to keep after analysis :</label>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i <input name=\"processed_size\" type=\"number\" style=\"width:6em;\" max=\"90\" min=\"0\" step=\"1\" value=\"<\?php print(\$config\['PROCESSED_SIZE'\]);?>\"/>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i </td></tr><tr><td>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i Processed is the directory where the formerly 'Analyzed' files are moved after extractions, mostly for troubleshooting purposes.<br>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i This value defines the maximum amount of files that are kept before replacement with new files.<br>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i </td></tr></table>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
sed -i "/\"success\"/i\ <br>" "$HOME"/BattyBirdNET-Analyzer/scripts/config.php
|
||||
# Adapt birdnet_analysis.py - move_to_processed
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ os.remove(files.pop(0))" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ while len(files) > processed_size:" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ files.sort(key=os.path.getmtime)" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ files = glob.glob(os.path.join(processed_dir, '*'))" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ os.rename(file_name, os.path.join(processed_dir, os.path.basename(file_name)))" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ processed_dir = os.path.join(get_settings()['RECS_DIR'], 'Processed')" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\def move_to_processed(file_name, processed_size):" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ " "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ os.remove(files.pop(0))" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ while len(files) > processed_size:" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ files.sort(key=os.path.getmtime)" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ files = glob.glob(os.path.join(processed_dir, '*'))" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ os.rename(file_name, os.path.join(processed_dir, os.path.basename(file_name)))" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ processed_dir = os.path.join(get_settings()['RECS_DIR'], 'Processed')" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\def move_to_processed(file_name, processed_size):" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ " "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
# Adapt birdnet_analysis.py - get_processed_size
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ return 0" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ except (ValueError, TypeError):" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ return processed_size if isinstance(processed_size, int) else 0" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ processed_size = get_settings().getint('PROCESSED_SIZE')" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ try:" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\def get_processed_size():" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ " "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ return 0" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ except (ValueError, TypeError):" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ return processed_size if isinstance(processed_size, int) else 0" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ processed_size = get_settings().getint('PROCESSED_SIZE')" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ try:" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\def get_processed_size():" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/log.info('handle_reporting_queue done')/a\ " "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
# Modify calls
|
||||
sed -i "/from subprocess import CalledProcessError/a\import glob" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/from subprocess import CalledProcessError/a\import time" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/from subprocess import CalledProcessError/a\import glob" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/from subprocess import CalledProcessError/a\import time" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
# Modify main code
|
||||
sed -i "/os.remove(file.file_name)/i\ processed_size = get_processed_size()" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ if processed_size > 0:" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ move_to_processed(file.file_name, processed_size)" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ else:" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/c\ os.remove(file.file_name)" "$HOME"/BirdNET-Pi/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ processed_size = get_processed_size()" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ if processed_size > 0:" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ move_to_processed(file.file_name, processed_size)" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/i\ else:" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
sed -i "/os.remove(file.file_name)/c\ os.remove(file.file_name)" "$HOME"/BattyBirdNET-Analyzer/scripts/birdnet_analysis.py
|
||||
fi || true
|
||||
|
||||
echo " "
|
||||
|
||||
@@ -11,37 +11,37 @@ bashio::log.info "Adapting webui"
|
||||
|
||||
# Remove services tab
|
||||
echo "... removing System Controls from webui as should be used from HA"
|
||||
sed -i '/>System Controls/d' "$HOME"/BirdNET-Pi/homepage/views.php
|
||||
sed -i '/>System Controls/d' "$HOME"/BattyBirdNET-Analyzer/homepage/views.php
|
||||
|
||||
# Remove services tab
|
||||
echo "... removing Ram drive from webui as it is handled from HA"
|
||||
sed -i '/Ram drive/{n;s/center"/center" style="display: none;"/;}' "$HOME"/BirdNET-Pi/scripts/service_controls.php
|
||||
sed -i '/Ram drive/d' "$HOME"/BirdNET-Pi/scripts/service_controls.php
|
||||
sed -i '/Ram drive/{n;s/center"/center" style="display: none;"/;}' "$HOME"/BattyBirdNET-Analyzer/scripts/service_controls.php
|
||||
sed -i '/Ram drive/d' "$HOME"/BattyBirdNET-Analyzer/scripts/service_controls.php
|
||||
|
||||
# Correct services to start as user pi
|
||||
echo "... correct services to start as pi"
|
||||
for file in $(find "$HOME"/BirdNET-Pi/templates/birdnet*.service -print0 | xargs -0 basename -a) livestream.service chart_viewer.service chart_viewer.service spectrogram_viewer.service; do
|
||||
for file in $(find "$HOME"/BattyBirdNET-Analyzer/templates/birdnet*.service -print0 | xargs -0 basename -a) livestream.service chart_viewer.service chart_viewer.service spectrogram_viewer.service; do
|
||||
if [[ "$file" != "birdnet_log.service" ]]; then
|
||||
sed -i "s|ExecStart=|ExecStart=/usr/bin/sudo -u pi |g" "$HOME/BirdNET-Pi/templates/$file"
|
||||
sed -i "s|ExecStart=|ExecStart=/usr/bin/sudo -u pi |g" "$HOME/BattyBirdNET-Analyzer/templates/$file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Send services log to container logs
|
||||
echo "... send services log to container logs"
|
||||
for file in $(find "$HOME"/BirdNET-Pi/templates/birdnet*.service -print0 | xargs -0 basename -a) livestream.service chart_viewer.service chart_viewer.service spectrogram_viewer.service; do
|
||||
sed -i "/Service/a StandardError=append:/proc/1/fd/1" "$HOME/BirdNET-Pi/templates/$file"
|
||||
sed -i "/Service/a StandardOutput=append:/proc/1/fd/1" "$HOME/BirdNET-Pi/templates/$file"
|
||||
for file in $(find "$HOME"/BattyBirdNET-Analyzer/templates/birdnet*.service -print0 | xargs -0 basename -a) livestream.service chart_viewer.service chart_viewer.service spectrogram_viewer.service; do
|
||||
sed -i "/Service/a StandardError=append:/proc/1/fd/1" "$HOME/BattyBirdNET-Analyzer/templates/$file"
|
||||
sed -i "/Service/a StandardOutput=append:/proc/1/fd/1" "$HOME/BattyBirdNET-Analyzer/templates/$file"
|
||||
done
|
||||
|
||||
# Avoid preselection in include and exclude lists
|
||||
echo "... avoid preselecting options in include and exclude lists"
|
||||
sed -i "s|option selected|option disabled|g" "$HOME"/BirdNET-Pi/scripts/include_list.php
|
||||
sed -i "s|option selected|option disabled|g" "$HOME"/BirdNET-Pi/scripts/exclude_list.php
|
||||
sed -i "s|option selected|option disabled|g" "$HOME"/BattyBirdNET-Analyzer/scripts/include_list.php
|
||||
sed -i "s|option selected|option disabled|g" "$HOME"/BattyBirdNET-Analyzer/scripts/exclude_list.php
|
||||
|
||||
# Correct log services to show /proc/1/fd/1
|
||||
echo "... show container logs in /logs"
|
||||
sed -i "/User=pi/d" "$HOME/BirdNET-Pi/templates/birdnet_log.service"
|
||||
sed -i "s|birdnet_log.sh|cat /proc/1/fd/1|g" "$HOME/BirdNET-Pi/templates/birdnet_log.service"
|
||||
sed -i "/User=pi/d" "$HOME/BattyBirdNET-Analyzer/templates/birdnet_log.service"
|
||||
sed -i "s|birdnet_log.sh|cat /proc/1/fd/1|g" "$HOME/BattyBirdNET-Analyzer/templates/birdnet_log.service"
|
||||
|
||||
# Make sure config is correctly formatted.
|
||||
echo "... caddyfile modifications"
|
||||
@@ -49,14 +49,14 @@ echo "... caddyfile modifications"
|
||||
caddy fmt --overwrite /etc/caddy/Caddyfile
|
||||
#Change port to leave 80 free for certificate requests
|
||||
sed -i "s|http://|http://:8081|g" /etc/caddy/Caddyfile
|
||||
sed -i "s|http://|http://:8081|g" "$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh
|
||||
sed -i "s|http://|http://:8081|g" "$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh
|
||||
#Remove default file that blocks 80
|
||||
if [ -f /etc/caddy/Caddyfile.original ]; then rm /etc/caddy/Caddyfile.original; fi
|
||||
|
||||
# Improve webui paths to facilitate ingress
|
||||
echo "... correcting webui paths"
|
||||
sed -i "s|/stats|/stats/|g" "$HOME"/BirdNET-Pi/homepage/views.php
|
||||
sed -i "s|/log|/log/|g" "$HOME"/BirdNET-Pi/homepage/views.php
|
||||
sed -i "s|/stats|/stats/|g" "$HOME"/BattyBirdNET-Analyzer/homepage/views.php
|
||||
sed -i "s|/log|/log/|g" "$HOME"/BattyBirdNET-Analyzer/homepage/views.php
|
||||
|
||||
# If port 80 is enabled, make sure it is still 80
|
||||
if [ -n "$(bashio::addon.port 80)" ] && [ "$(bashio::addon.port 80)" != 80 ]; then
|
||||
|
||||
@@ -27,11 +27,11 @@ sed -i "s|%%ingress_entry%%|${ingress_entry}|g" /etc/nginx/servers/ingress.conf
|
||||
|
||||
echo "... ensuring restricted area access"
|
||||
echo "${ingress_entry}" > /ingress_url
|
||||
sed -i "/function is_authenticated/a if (strpos(\$_SERVER['HTTP_REFERER'], '/api/hassio_ingress') !== false && strpos(\$_SERVER['HTTP_REFERER'], trim(file_get_contents('/ingress_url'))) !== false) { \$ret = true; return \$ret; }" "$HOME"/BirdNET-Pi/scripts/common.php
|
||||
sed -i "/function is_authenticated/a if (strpos(\$_SERVER['HTTP_REFERER'], '/api/hassio_ingress') !== false && strpos(\$_SERVER['HTTP_REFERER'], trim(file_get_contents('/ingress_url'))) !== false) { \$ret = true; return \$ret; }" "$HOME"/BattyBirdNET-Analyzer/scripts/common.php
|
||||
|
||||
echo "... adapt Caddyfile for ingress"
|
||||
chmod +x /helpers/caddy_ingress.sh
|
||||
/./helpers/caddy_ingress.sh
|
||||
sed -i "/sudo caddy fmt --overwrite/i /./helpers/caddy_ingress.sh" "$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh
|
||||
sed -i "/sudo caddy fmt --overwrite/i /./helpers/caddy_ingress.sh" "$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh
|
||||
|
||||
echo " "
|
||||
|
||||
@@ -13,8 +13,8 @@ if bashio::config.true 'ssl'; then
|
||||
keyfile=$(bashio::config 'keyfile')
|
||||
sed -i "2a\ tls /ssl/${certfile} /ssl/${keyfile}" /etc/caddy/Caddyfile
|
||||
sed -i "s|http://:8081|https://:8081|g" /etc/caddy/Caddyfile
|
||||
sed -i "s|http://:8081|https://:8081|g" "$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh
|
||||
sed -i "/https:/a tls /ssl/${certfile} /ssl/${keyfile}" "$HOME"/BirdNET-Pi/scripts/update_caddyfile.sh
|
||||
sed -i "s|http://:8081|https://:8081|g" "$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh
|
||||
sed -i "/https:/a tls /ssl/${certfile} /ssl/${keyfile}" "$HOME"/BattyBirdNET-Analyzer/scripts/update_caddyfile.sh
|
||||
fi
|
||||
|
||||
echo " "
|
||||
|
||||
@@ -35,10 +35,10 @@ chmod a+x /usr/bin/timedatectl
|
||||
# Correct language labels
|
||||
export "$(grep "^DATABASE_LANG" /config/birdnet.conf)"
|
||||
# Saving default of en
|
||||
cp "$HOME"/BirdNET-Pi/model/labels.txt "$HOME"/BirdNET-Pi/model/labels.bak
|
||||
cp "$HOME"/BattyBirdNET-Analyzer/model/labels.txt "$HOME"/BattyBirdNET-Analyzer/model/labels.bak
|
||||
# Adapt to new language
|
||||
echo "... adapting labels according to birdnet.conf file to $DATABASE_LANG"
|
||||
/."$HOME"/BirdNET-Pi/scripts/install_language_label_nm.sh -l "$DATABASE_LANG"
|
||||
/."$HOME"/BattyBirdNET-Analyzer/scripts/install_language_label_nm.sh -l "$DATABASE_LANG"
|
||||
|
||||
echo "... starting cron"
|
||||
systemctl start cron
|
||||
@@ -53,9 +53,9 @@ service dbus start
|
||||
|
||||
# Starting services
|
||||
echo ""
|
||||
bashio::log.info "Starting battybirdnet-pi services"
|
||||
chmod +x "$HOME"/BirdNET-Pi/scripts/restart_services.sh
|
||||
"$HOME"/BirdNET-Pi/scripts/restart_services.sh
|
||||
bashio::log.info "Starting battyBattyBirdNET-Analyzer services"
|
||||
chmod +x "$HOME"/BattyBirdNET-Analyzer/scripts/restart_services.sh
|
||||
"$HOME"/BattyBirdNET-Analyzer/scripts/restart_services.sh
|
||||
|
||||
if bashio::config.true LIVESTREAM_BOOT_ENABLED; then
|
||||
echo "... starting livestream"
|
||||
@@ -67,6 +67,6 @@ fi
|
||||
# Correct the phpsysinfo for the correct gotty service
|
||||
gottyservice="$(pgrep -l "gotty" | awk '{print $NF}' | head -n 1)"
|
||||
echo "... using $gottyservice in phpsysinfo"
|
||||
sed -i "s/,gotty,/,${gottyservice:-gotty},/g" "$HOME"/BirdNET-Pi/templates/phpsysinfo.ini
|
||||
sed -i "s/,gotty,/,${gottyservice:-gotty},/g" "$HOME"/BattyBirdNET-Analyzer/templates/phpsysinfo.ini
|
||||
|
||||
echo " "
|
||||
|
||||
@@ -11,7 +11,7 @@ import requests
|
||||
import sys
|
||||
import os
|
||||
|
||||
sys.path.append('/home/pi/BirdNET-Pi/scripts/utils')
|
||||
sys.path.append('/home/pi/BattyBirdNET-Analyzer/scripts/utils')
|
||||
from helpers import get_settings
|
||||
|
||||
# Setup basic configuration for logging
|
||||
@@ -39,7 +39,7 @@ def on_connect(client, userdata, flags, rc ): #, properties=None):
|
||||
log.error(f"Failed to connect, return code {rc}\n")
|
||||
|
||||
def get_bird_code(scientific_name):
|
||||
with open('/home/pi/BirdNET-Pi/scripts/ebird.php', 'r') as file:
|
||||
with open('/home/pi/BattyBirdNET-Analyzer/scripts/ebird.php', 'r') as file:
|
||||
data = file.read()
|
||||
|
||||
array_str = re.search(r'\$ebirds = \[(.*?)\];', data, re.DOTALL).group(1)
|
||||
@@ -86,7 +86,7 @@ def automatic_mqtt_publish(file, detection, path):
|
||||
|
||||
json_bird = json.dumps(bird)
|
||||
mqttc.reconnect()
|
||||
mqttc.publish(mqtt_topic, json_bird, 1)
|
||||
mqttc.publish(mqtt_topic, json_bird, 1)
|
||||
log.info("Posted to MQTT: ok")
|
||||
|
||||
mqttc = mqtt.Client('birdnet_mqtt')
|
||||
|
||||
@@ -59,4 +59,4 @@ else
|
||||
fi
|
||||
|
||||
# Create the spectral analysis
|
||||
"$PYTHON_VIRTUAL_ENV" "$HOME"/BirdNET-Pi/scripts/spectral_analysis.py
|
||||
"$PYTHON_VIRTUAL_ENV" "$HOME"/BattyBirdNET-Analyzer/scripts/spectral_analysis.py
|
||||
|
||||
Reference in New Issue
Block a user