QuecManager BETA 1.0.7

- Resolved SMS Inbox Display Issue: Fixed a bug preventing messages from being displayed in the SMS inbox.

- Enhanced SMS Inbox Functionality: Optimized the SMS inbox to group messages with the same sender and timestamp.

- Corrected Signal Metrics Calculation: Addressed inaccuracies in the calculation of signal metrics.

- Updated Speedtest Cooldown: Increased the cooldown period for speed tests from 5 seconds to 10 seconds.

- Improved Speedtest Cleanup: Ensured the pipe is removed automatically after the speed test completes.

- Updated to NextJS 15

- Improved Quecwatch script

Co-Authored-By: Russel Yasol <73575327+dr-dolomite@users.noreply.github.com>
This commit is contained in:
Cameron Thompson
2024-12-22 13:12:20 -05:00
parent fe88898f2f
commit 007b268b03
151 changed files with 617 additions and 420 deletions

View File

@@ -28,7 +28,6 @@ max_retries=$(echo "$QUERY_STRING" | grep -o 'max_retries=[^&]*' | cut -d= -f2)
connection_refresh=$(echo "$QUERY_STRING" | grep -o 'connection_refresh=[^&]*' | cut -d= -f2)
auto_sim_failover=$(echo "$QUERY_STRING" | grep -o 'auto_sim_failover=[^&]*' | cut -d= -f2)
sim_failover_schedule=$(echo "$QUERY_STRING" | grep -o 'sim_failover_schedule=[^&]*' | cut -d= -f2)
mobile_data_reconnect=$(echo "$QUERY_STRING" | grep -o 'mobile_data_reconnect=[^&]*' | cut -d= -f2)
# URL decode the values
action=$(urldecode "$action")
@@ -39,7 +38,6 @@ max_retries=$(urldecode "$max_retries")
connection_refresh=$(urldecode "$connection_refresh")
auto_sim_failover=$(urldecode "$auto_sim_failover")
sim_failover_schedule=$(urldecode "$sim_failover_schedule")
mobile_data_reconnect=$(urldecode "$mobile_data_reconnect")
# Default response headers
echo "Content-type: application/json"
@@ -78,8 +76,6 @@ AUTO_SIM_FAILOVER=${auto_sim_failover:-false}
# Schedule for checking initial SIM (in minutes)
# 0 means no scheduled check
SIM_FAILOVER_SCHEDULE=${sim_failover_schedule:-0}
# Enable/Disable Mobile Data Reconnect
MOBILE_DATA_RECONNECT=${mobile_data_reconnect:-false}
# Indicate that QuecWatch is enabled
ENABLED=true
EOL
@@ -112,18 +108,18 @@ update_retry_count() {
. /etc/quecmanager/quecwatch/quecwatch.conf
}
# Function to get current SIM slot
get_current_sim() {
echo AT+QUIMSLOT? | atinout - /dev/smd11 /tmp/log/quecwatch/current_sim.txt
grep "+QUIMSLOT:" /tmp/log/quecwatch/current_sim.txt | awk '{print $2}'
}
# Function to switch SIM card
switch_sim_card() {
log_event "Attempting to switch SIM card"
# Create log directory if it doesn't exist
mkdir -p /tmp/log/quecwatch
# Get current SIM slot using AT command
echo AT+QUIMSLOT? | atinout - /dev/smd7 /tmp/log/quecwatch/current_sim.txt
# Extract numerical value from the output
current_sim_slot=$(grep "+QUIMSLOT:" /tmp/log/quecwatch/current_sim.txt | awk '{print $2}')
# Get current SIM slot
current_sim_slot=$(get_current_sim)
# Toggle between SIM slots (assuming 2 SIM slots)
if [ "${current_sim_slot}" = "1" ]; then
@@ -132,135 +128,103 @@ switch_sim_card() {
new_sim_slot=1
fi
# Explicitly set the new SIM slot
log_event "Switching from SIM slot ${current_sim_slot} to SIM slot ${new_sim_slot}"
echo "AT+QUIMSLOT=${new_sim_slot}" | atinout - /dev/smd11 -
sleep 10 # Give more time for SIM switch and network registration
# Add your SIM switching command here
# Example (adjust based on your modem's AT commands):
echo "AT+QUIMSLOT=${new_sim_slot}" | atinout - /dev/smd7 -
# Update current_sim_slot with the new value
current_sim_slot=${new_sim_slot}
return 0
}
# Function to toggle mobile data
toggle_mobile_data() {
log_event "Toggling mobile data"
# Use CFUN to restart mobile functionality
echo AT+CFUN=0 | atinout - /dev/smd7 -
#sleep 5
echo AT+CFUN=1 | atinout - /dev/smd7 -
# Function to check internet connectivity
check_internet() {
ping -c 3 ${PING_TARGET} > /dev/null 2>&1
return $?
}
# Function to perform connection recovery
perform_connection_recovery() {
local recovery_attempted=0
local recovery_successful=0
# 1. Try Connection Refresh first if enabled (when retry_trigger is 1)
# Try Connection Refresh if enabled
if [ "${CONNECTION_REFRESH}" = "true" ] && [ "${retry_trigger}" -eq 1 ] && [ "${REFRESH_COUNT}" -gt 0 ]; then
log_event "Attempting connection refresh"
echo AT+COPS=2 | atinout - /dev/smd7 -
echo AT+COPS=2 | atinout - /dev/smd11 -
sleep 2
echo AT+COPS=0 | atinout - /dev/smd7 -
echo AT+COPS=0 | atinout - /dev/smd11 -
sleep 5
# Verify connection after refresh
if ping -c 3 ${PING_TARGET} > /dev/null 2>&1; then
if check_internet; then
log_event "Connection refresh successful"
recovery_successful=1
return 0
fi
# Decrement refresh count
REFRESH_COUNT=$((REFRESH_COUNT - 1))
sed -i "s/REFRESH_COUNT=.*/REFRESH_COUNT=${REFRESH_COUNT}/" /etc/quecmanager/quecwatch/quecwatch.conf
recovery_attempted=1
fi
# 2. Try Auto SIM Failover when retry_trigger is 2 (or 1 if Connection Refresh is disabled)
local sim_failover_trigger=$((CONNECTION_REFRESH == "true" ? 2 : 1))
if [ "${AUTO_SIM_FAILOVER}" = "true" ] && [ "${retry_trigger}" -eq ${sim_failover_trigger} ]; then
log_event "Attempting SIM failover"
# Get current SIM slot
echo AT+QUIMSLOT? | atinout - /dev/smd7 /tmp/log/quecwatch/current_sim.txt
initial_sim_slot=$(grep "+QUIMSLOT:" /tmp/log/quecwatch/current_sim.txt | awk '{print $2}')
# Switch SIM card
switch_sim_card
# Verify connection after SIM switch
if ping -c 3 ${PING_TARGET} > /dev/null 2>&1; then
log_event "SIM failover successful"
return 0
fi
recovery_attempted=1
fi
# 3. Try Mobile Data Reconnect if enabled
if [ "${MOBILE_DATA_RECONNECT}" = "true" ]; then
log_event "Attempting mobile data reconnect"
toggle_mobile_data
# Verify connection after mobile data toggle
if ping -c 3 ${PING_TARGET} > /dev/null 2>&1; then
log_event "Mobile data reconnect successful"
return 0
fi
recovery_attempted=1
fi
# 4. If no recovery methods worked or none were enabled, return failure
if [ ${recovery_attempted} -eq 0 ]; then
log_event "No recovery methods enabled"
return 1
fi
return 1
[ ${recovery_successful} -eq 1 ] && return 0 || return 1
}
# Store initial SIM slot only if auto SIM failover is enabled
initial_sim_slot=""
if [ "${AUTO_SIM_FAILOVER}" = "true" ]; then
initial_sim_slot=$(get_current_sim)
log_event "Auto SIM failover enabled. Initial SIM slot: ${initial_sim_slot}"
fi
# Main loop
failure_count=0
retry_trigger=0
sim_failover_interval=0
while true; do
# Ping the target
if ! ping -c ${PING_FAILURES} ${PING_TARGET} > /dev/null 2>&1; then
# Check internet connectivity
if ! check_internet; then
failure_count=$((failure_count + 1))
log_event "Ping failed. Failure count: ${failure_count}"
# Check if failure threshold is reached
if [ ${failure_count} -ge ${PING_FAILURES} ]; then
# Reset failure count
failure_count=0
retry_trigger=$((retry_trigger + 1))
# Update retry count in config
update_retry_count ${retry_trigger}
log_event "Failure threshold reached. Retry trigger: ${retry_trigger}"
# Check if retry threshold is reached
if [ ${retry_trigger} -ge ${MAX_RETRIES} ]; then
log_event "Max retries exhausted. Removing QuecWatch."
# Remove the script from rc.local
sed -i '\|/etc/quecmanager/quecwatch/quecwatch.sh|d' /etc/rc.local
# Perform final system reboot
reboot
exit 0
fi
# Attempt connection recovery
if perform_connection_recovery; then
# Recovery successful
log_event "Connection recovery successful"
retry_trigger=0
failure_count=0
update_retry_count 0
else
# Recovery failed, choose recovery method based on configurations
if [ "${MOBILE_DATA_RECONNECT}" = "true" ]; then
log_event "Recovery failed. Attempting mobile data restart."
toggle_mobile_data
# Only attempt SIM failover if enabled
if [ "${AUTO_SIM_FAILOVER}" = "true" ]; then
log_event "Max retries exhausted. Auto SIM failover is enabled. Attempting SIM failover."
switch_sim_card
if check_internet; then
log_event "SIM failover successful"
retry_trigger=0
failure_count=0
update_retry_count 0
else
log_event "SIM failover failed. Performing system reboot."
reboot
fi
else
log_event "Recovery failed. Rebooting system."
# If auto SIM failover is not enabled, follow original behavior
log_event "Max retries exhausted. Auto SIM failover is disabled. Removing QuecWatch."
sed -i '\|/etc/quecmanager/quecwatch/quecwatch.sh|d' /etc/rc.local
reboot
exit 0
fi
else
# Attempt connection recovery
if perform_connection_recovery; then
retry_trigger=0
failure_count=0
update_retry_count 0
else
log_event "Recovery failed. Performing system reboot."
reboot
fi
fi
@@ -270,33 +234,34 @@ while true; do
failure_count=0
retry_trigger=0
update_retry_count 0
# Add success log message
log_event "Modem is connected to the internet"
# Check if SIM Failover Scheduler is enabled and interval has passed
# Only check SIM schedule if auto SIM failover is enabled
if [ "${AUTO_SIM_FAILOVER}" = "true" ] && [ "${SIM_FAILOVER_SCHEDULE}" -gt 0 ]; then
sim_failover_interval=$((sim_failover_interval + 1))
current_sim_slot=$(get_current_sim)
# Check if it's time to switch back to initial SIM
if [ $((sim_failover_interval * ${PING_INTERVAL})) -ge $((${SIM_FAILOVER_SCHEDULE} * 60)) ]; then
log_event "Checking initial SIM card"
# Only proceed with schedule check if we're on the backup SIM
if [ -n "${initial_sim_slot}" ] && [ "${current_sim_slot}" != "${initial_sim_slot}" ]; then
sim_failover_interval=$((sim_failover_interval + 1))
# Only switch back if max retries were NOT exhausted
if [ ${retry_trigger} -lt ${MAX_RETRIES} ]; then
# Switch back to initial SIM
echo AT+QUIMSLOT=${initial_sim_slot} | atinout - /dev/smd7 -
# Check if schedule interval has passed
if [ $((sim_failover_interval * PING_INTERVAL)) -ge $((SIM_FAILOVER_SCHEDULE * 60)) ]; then
log_event "Scheduled check: Attempting to switch back to initial SIM ${initial_sim_slot}"
# Check connection on initial SIM
if ping -c 3 ${PING_TARGET} > /dev/null 2>&1; then
# Switch to initial SIM
echo "AT+QUIMSLOT=${initial_sim_slot}" | atinout - /dev/smd11 -
sleep 10
# Check if initial SIM works
if check_internet; then
log_event "Initial SIM restored successfully"
current_sim_slot=${initial_sim_slot}
# Reset retry trigger when switching back
retry_trigger=0
failure_count=0
update_retry_count 0
else
log_event "Initial SIM still not working. Remaining on failover SIM."
log_event "Initial SIM still not working. Switching back to backup SIM."
echo "AT+QUIMSLOT=${current_sim_slot}" | atinout - /dev/smd11 -
sleep 10
fi
# Reset interval counter
@@ -347,10 +312,9 @@ enable_quecwatch() {
echo "Connection Refresh: $connection_refresh"
echo "Auto SIM Failover: $auto_sim_failover"
echo "SIM Failover Schedule: $sim_failover_schedule"
echo "Mobile Data Reconnect: $mobile_data_reconnect"
} >>"$DEBUG_LOG_FILE" 2>&1
# Enable QuecWatch
enable_quecwatch
exit 0
exit 0