v1.9.2: Fix hotspot non démarré si SQLite lockée au boot

- boot_hotspot.sh: busy timeout 5s sur les requêtes SQLite
- boot_hotspot.sh: SSID fallback nebuleair-pro-<serial> si deviceName vide
- Corrige le cas où le hotspot ne démarrait pas quand la DB était
  lockée par les timers systemd au boot (SSID vide → nmcli refuse)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
PaulVua
2026-05-20 11:15:08 +02:00
parent 654c05f548
commit 69fa928d56
3 changed files with 31 additions and 7 deletions

View File

@@ -44,21 +44,29 @@ echo "getting RPI serial number"
serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}')
# update Sqlite database (only if not already set, i.e., still has default value 'XXXX')
# Use busy timeout to handle concurrent access from systemd timers at boot
echo "Updating SQLite database with device ID: $serial_number"
sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='$serial_number' WHERE key='deviceID' AND value='XXXX';"
sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='$serial_number' WHERE key='deviceID' AND value='XXXX';"
echo "id: $serial_number"
# Get deviceID from SQLite config_table (may be different from serial_number if manually configured)
DEVICE_ID=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceID'")
DEVICE_ID=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceID'")
echo "Device ID from database: $DEVICE_ID"
# Get deviceName from SQLite config_table for use in hotspot SSID
DEVICE_NAME=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceName'")
DEVICE_NAME=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='deviceName'")
echo "Device Name from database: $DEVICE_NAME"
# Fallback SSID if DB read failed (lock contention) or deviceName is empty:
# use a deterministic name derived from the RPi serial so hotspot still starts.
if [ -z "$DEVICE_NAME" ]; then
DEVICE_NAME="nebuleair-pro-$serial_number"
echo "WARN: deviceName empty in DB, using fallback SSID: $DEVICE_NAME"
fi
# Get SSH tunnel port from SQLite config_table
SSH_TUNNEL_PORT=$(sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='sshTunnel_port'")
SSH_TUNNEL_PORT=$(sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "SELECT value FROM config_table WHERE key='sshTunnel_port'")
#need to wait for the network manager to be ready
sleep 20
@@ -92,7 +100,7 @@ if [ "$STATE" == "30 (disconnected)" ]; then
sudo nmcli device wifi hotspot ifname wlan0 ssid "$DEVICE_NAME" password nebuleaircfg
# Update SQLite to reflect hotspot mode
sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='hotspot' WHERE key='WIFI_status'"
sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='hotspot' WHERE key='WIFI_status'"
else
echo "🛜Success: wlan0 is connected!🛜"
@@ -100,7 +108,7 @@ else
echo "Connection: $CONN_SSID"
# Update SQLite to reflect hotspot mode
sqlite3 /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='connected' WHERE key='WIFI_status'"
sqlite3 -cmd ".timeout 5000" /var/www/nebuleair_pro_4g/sqlite/sensors.db "UPDATE config_table SET value='connected' WHERE key='WIFI_status'"
# Lancer le tunnel SSH
#echo "Démarrage du tunnel SSH sur le port $SSH_TUNNEL_PORT..."