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:
@@ -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
|
||||
Reference in New Issue
Block a user