diff --git a/ansible/roles/common/templates/noaa-v2.conf.j2 b/ansible/roles/common/templates/noaa-v2.conf.j2 index 819602a0..5b44b307 100644 --- a/ansible/roles/common/templates/noaa-v2.conf.j2 +++ b/ansible/roles/common/templates/noaa-v2.conf.j2 @@ -38,6 +38,8 @@ IMAGE_ANNOTATION_LOCATION={{ image_annotation_location }} GROUND_STATION_LOCATION='{{ ground_station_location }}' SHOW_SUN_ELEVATION={{ show_sun_elevation|lower }} SHOW_PASS_DIRECTION={{ show_pass_direction|lower }} +NOAA_DAY_ENHANCEMENTS='{{ noaa_daytime_enhancements }}' +NOAA_NIGHT_ENHANCEMENTS='{{ noaa_nighttime_enhancements }}' ENABLE_EMAIL_PUSH={{ enable_email_push|lower }} EMAIL_PUSH_ADDRESS={{ email_push_address }} ENABLE_EMAIL_SCHEDULE_PUSH={{ enable_email_schedule_push|lower }} diff --git a/ansible/roles/webserver/templates/Config.php.j2 b/ansible/roles/webserver/templates/Config.php.j2 index 22dec50a..a6932da7 100644 --- a/ansible/roles/webserver/templates/Config.php.j2 +++ b/ansible/roles/webserver/templates/Config.php.j2 @@ -30,6 +30,10 @@ class Config { # how many captures to list on admin page for management const ADMIN_CAPTURES_PER_PAGE = 100; + + # which enhancements to display for day/night + const NOAA_DAY_ENHANCEMENTS = '{{ noaa_daytime_enhancements }}'; + const NOAA_NIGHT_ENHANCEMENTS = '{{ noaa_nighttime_enhancements }}'; } ?> diff --git a/config/settings.yml.sample b/config/settings.yml.sample index b5e78265..4d9c4630 100644 --- a/config/settings.yml.sample +++ b/config/settings.yml.sample @@ -46,6 +46,10 @@ delete_audio: false # annotation (leave blank if you wish to exclude the ground station annotation) # show_sun_elevation - whether to show sun elevation in annotation # show_pass_direction - show which direction the satellite is moving in the image annotation +# noaa_daytime_enhancements - list of enhancements to create images using during daytime captures +# (note: default value is total list of supported image processors) +# noaa_nighttime_enhancements - list of enhancements to create images using during nighttime captures +# (note: default value is total list of supported image processors) flip_meteor_image: true produce_spectrogram: true noaa_crop_telemetry: false @@ -54,6 +58,8 @@ produce_noaa_pristine_image: false ground_station_location: '' show_sun_elevation: false show_pass_direction: false +noaa_daytime_enhancements: 'ZA MCIR MCIR-precip MSA MSA-precip HVC-precip HVCT-precip HVC HVCT therm' +noaa_nighttime_enhancements: 'ZA MCIR MCIR-precip therm' # thresholds for scheduling captures - enables avoiding an attempt # to capture imagery if objects are lower than these degree elevation thresholds diff --git a/scripts/receive_meteor.sh b/scripts/receive_meteor.sh index 06aec1df..74d6091e 100755 --- a/scripts/receive_meteor.sh +++ b/scripts/receive_meteor.sh @@ -50,6 +50,10 @@ fi PASS_START=$(expr "$EPOCH_START" + 90) SUN_ELEV=$(python3 "$SCRIPTS_DIR"/tools/sun.py "$PASS_START") +# determine if pass is in daylight +daylight=0 +if [ "${SUN_ELEV}" -gt "${SUN_MIN_ELEV}" ]; then daylight=1; fi + # store annotation for images annotation="" if [ "${GROUND_STATION_LOCATION}" != "" ]; then @@ -137,9 +141,20 @@ if [ "$METEOR_RECEIVER" == "rtl_fm" ]; then fi # insert or replace in case there was already an insert due to the spectrogram creation - $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram) VALUES ($EPOCH_START,\"$FILENAME_BASE\", 1, 0, $spectrogram);" - pass_id=$(sqlite3 $DB_FILE "SELECT id FROM decoded_passes ORDER BY id DESC LIMIT 1;") - $SQLITE3 $DB_FILE "UPDATE predict_passes SET is_active = 0 WHERE (predict_passes.pass_start) in (select predict_passes.pass_start from predict_passes inner join decoded_passes on predict_passes.pass_start = decoded_passes.pass_start where decoded_passes.id = $pass_id);" + $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram) \ + VALUES ($EPOCH_START, \"$FILENAME_BASE\", $daylight, 0, $spectrogram);" + + pass_id=$($SQLITE3 $DB_FILE "SELECT id FROM decoded_passes ORDER BY id DESC LIMIT 1;") + $SQLITE3 $DB_FILE "UPDATE predict_passes \ + SET is_active = 0 \ + WHERE (predict_passes.pass_start) \ + IN ( \ + SELECT predict_passes.pass_start \ + FROM predict_passes \ + INNER JOIN decoded_passes \ + ON predict_passes.pass_start = decoded_passes.pass_start \ + WHERE decoded_passes.id = $pass_id \ + );" else log "Decoding failed, either a bad pass/low SNR or a software problem" "ERROR" fi @@ -190,9 +205,20 @@ elif [ "$METEOR_RECEIVER" == "gnuradio" ]; then convert -thumbnail 300 "${IMAGE_FILE_BASE}-col-122-rectified.jpg" "${IMAGE_THUMB_BASE}-col-122-rectified.jpg" # insert or replace in case there was already an insert due to the spectrogram creation - $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram) VALUES ($EPOCH_START,\"$FILENAME_BASE\", 1, 0, $spectrogram);" - pass_id=$(sqlite3 $DB_FILE "SELECT id FROM decoded_passes ORDER BY id DESC LIMIT 1;") - $SQLITE3 $DB_FILE "UPDATE predict_passes SET is_active = 0 WHERE (predict_passes.pass_start) in (select predict_passes.pass_start from predict_passes inner join decoded_passes on predict_passes.pass_start = decoded_passes.pass_start where decoded_passes.id = $pass_id);" + $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram) \ + VALUES ($EPOCH_START, \"$FILENAME_BASE\", $daylight, 0, $spectrogram);" + + pass_id=$($SQLITE3 $DB_FILE "SELECT id FROM decoded_passes ORDER BY id DESC LIMIT 1;") + $SQLITE3 $DB_FILE "UPDATE predict_passes \ + SET is_active = 0 \ + WHERE (predict_passes.pass_start) \ + IN ( \ + SELECT predict_passes.pass_start \ + FROM predict_passes \ + INNER JOIN decoded_passes \ + ON predict_passes.pass_start = decoded_passes.pass_start \ + WHERE decoded_passes.id = $pass_id \ + );" if [ "$ENABLE_EMAIL_PUSH" == "true" ]; then log "Emailing image" "INFO" diff --git a/scripts/receive_noaa.sh b/scripts/receive_noaa.sh index d03e1509..b4aa1852 100755 --- a/scripts/receive_noaa.sh +++ b/scripts/receive_noaa.sh @@ -98,13 +98,14 @@ fi map_overlay="${NOAA_HOME}/tmp/map/${FILENAME_BASE}-map.png" $WXMAP -T "${SAT_NAME}" -H "${TLE_FILE}" -p 0 ${extra_map_opts} -o "${epoch_adjusted}" $map_overlay >> $NOAA_LOG 2>&1 -# determine which enhancements to create based on sunlight/dark +# run all enhancements all the time - any that cannot be produced will +# simply be left out/not included, so there is no harm in running all of them if [ "${SUN_ELEV}" -gt "${SUN_MIN_ELEV}" ]; then - ENHANCEMENTS="ZA MCIR MCIR-precip MSA MSA-precip HVC-precip HVCT-precip HVC HVCT therm" - daylight="true" + ENHANCEMENTS="${NOAA_DAY_ENHANCEMENTS}" + daylight=1 else - ENHANCEMENTS="ZA MCIR MCIR-precip therm" - daylight="false" + ENHANCEMENTS="${NOAA_NIGHT_ENHANCEMENTS}" + daylight=0 fi # build images based on enhancements defined @@ -163,33 +164,38 @@ for enhancement in $ENHANCEMENTS; do log "No image processor found for $enhancement - skipping." "ERROR" else ${IMAGE_PROC_DIR}/${proc_script} $map_overlay "${AUDIO_FILE_BASE}.wav" "${IMAGE_FILE_BASE}-$enhancement.jpg" >> $NOAA_LOG 2>&1 - fi - ${IMAGE_PROC_DIR}/noaa_normalize_annotate.sh "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" 90 >> $NOAA_LOG 2>&1 - ${IMAGE_PROC_DIR}/thumbnail.sh 300 "${IMAGE_FILE_BASE}-$enhancement.jpg" "${IMAGE_THUMB_BASE}-$enhancement.jpg" >> $NOAA_LOG 2>&1 + ${IMAGE_PROC_DIR}/noaa_normalize_annotate.sh "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" 90 >> $NOAA_LOG 2>&1 + ${IMAGE_PROC_DIR}/thumbnail.sh 300 "${IMAGE_FILE_BASE}-$enhancement.jpg" "${IMAGE_THUMB_BASE}-$enhancement.jpg" >> $NOAA_LOG 2>&1 - if [ "${ENABLE_EMAIL_PUSH}" == "true" ]; then - log "Emailing image" "INFO" - ${PUSH_PROC_DIR}/push_email.sh "${EMAIL_PUSH_ADDRESS}" "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" >> $NOAA_LOG 2>&1 - fi + if [ "${ENABLE_EMAIL_PUSH}" == "true" ]; then + log "Emailing image" "INFO" + ${PUSH_PROC_DIR}/push_email.sh "${EMAIL_PUSH_ADDRESS}" "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" >> $NOAA_LOG 2>&1 + fi - if [ "${ENABLE_DISCORD_PUSH}" == "true" ]; then - ${PUSH_PROC_DIR}/push_discord.sh "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" >> $NOAA_LOG 2>&1 + if [ "${ENABLE_DISCORD_PUSH}" == "true" ]; then + ${PUSH_PROC_DIR}/push_discord.sh "${IMAGE_FILE_BASE}-$enhancement.jpg" "${annotation}" >> $NOAA_LOG 2>&1 + fi fi done rm "${NOAA_HOME}/tmp/map/${FILENAME_BASE}-map.png" # store enhancements -if [ "${SUN_ELEV}" -gt "${SUN_MIN_ELEV}" ]; then - $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram, has_pristine) VALUES ($EPOCH_START, \"$FILENAME_BASE\", 1, 1, $spectrogram, $pristine);" -else - $SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram, has_pristine) VALUES ($EPOCH_START, \"$FILENAME_BASE\", 0, 1, $spectrogram, $pristine);" -fi - -pass_id=$($SQLITE3 $DB_FILE "select id from decoded_passes order by id desc limit 1;") - -$SQLITE3 $DB_FILE "update predict_passes set is_active = 0 where (predict_passes.pass_start) in (select predict_passes.pass_start from predict_passes inner join decoded_passes on predict_passes.pass_start = decoded_passes.pass_start where decoded_passes.id = $pass_id);" +$SQLITE3 $DB_FILE "INSERT OR REPLACE INTO decoded_passes (pass_start, file_path, daylight_pass, sat_type, has_spectrogram, has_pristine) \ + VALUES ($EPOCH_START, \"$FILENAME_BASE\", $daylight, 1, $spectrogram, $pristine);" + +pass_id=$($SQLITE3 $DB_FILE "SELECT id FROM decoded_passes ORDER BY id DESC LIMIT 1;") +$SQLITE3 $DB_FILE "UPDATE predict_passes \ + SET is_active = 0 \ + WHERE (predict_passes.pass_start) \ + IN ( \ + SELECT predict_passes.pass_start \ + FROM predict_passes \ + INNER JOIN decoded_passes \ + ON predict_passes.pass_start = decoded_passes.pass_start \ + WHERE decoded_passes.id = $pass_id \ + );" if [ "$DELETE_AUDIO" = true ]; then log "Deleting audio files" "INFO" diff --git a/webpanel/App/Models/Capture.php b/webpanel/App/Models/Capture.php index 84b86bb6..ced5e56e 100644 --- a/webpanel/App/Models/Capture.php +++ b/webpanel/App/Models/Capture.php @@ -66,9 +66,9 @@ public function getEnhancements($id) { break; case 1: // NOAA if ($pass['daylight_pass'] == 1) { - $enhancements = ['-ZA.jpg','-MCIR.jpg','-MCIR-precip.jpg','-MSA.jpg','-MSA-precip.jpg','-HVC.jpg','-HVC-precip.jpg','-HVCT.jpg','-HVCT-precip.jpg','-therm.jpg']; + $enhancements = array_map(function($x) { return "-" . $x . ".jpg"; }, explode(' ', Config::NOAA_DAY_ENHANCEMENTS)); } else { - $enhancements = ['-ZA.jpg','-MCIR.jpg','-MCIR-precip.jpg','-therm.jpg']; + $enhancements = array_map(function($x) { return "-" . $x . ".jpg"; }, explode(' ', Config::NOAA_NIGHT_ENHANCEMENTS)); } break; }