Files
nebuleair_pro_4g/installation_part2.sh
PaulVua 7ad133f446 v1.7.4: Source de verite unique pour les services + update self-healing
setup_services.sh devient la source unique pour les services systemd
(le service rtc_save_to_db etait auparavant cree inline dans
installation_part2.sh, en doublon avec un commentaire dans save_to_db.py).

update_firmware.sh appelle maintenant setup_services.sh apres le git
pull. Resultat: les capteurs deja deployes peuvent se reparer tout
seuls au prochain update firmware (services manquants, masques, ou
nouveaux services ajoutes au repo apres l'installation initiale).

Defensif: systemctl unmask sur rtc_save_to_db avant creation du
fichier .service, pour eviter d'ecrire dans /dev/null si le service
avait ete masque (cas observe sur un capteur en production).

Pas de risque sur les capteurs sains: reecriture des .service avec
le meme contenu, comportement inchange.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:33:54 +02:00

111 lines
3.5 KiB
Bash

#!/bin/bash
# Script to set up the App after rebooting
# Exit on error, unset variable usage, and error in a pipeline
set -euo pipefail
# Define color variables
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No color
# Function to print messages in color
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
# Check for root privileges
if [[ "$EUID" -ne 0 ]]; then
error "This script must be run as root. Use 'sudo ./installation.sh'"
fi
REPO_DIR="/var/www/nebuleair_pro_4g"
#set up the RTC
info "Set up the RTC"
/usr/bin/python3 /var/www/nebuleair_pro_4g/RTC/set_with_NTP.py
#Wake up SARA
info "Wake Up SARA"
pinctrl set 16 op
pinctrl set 16 dh
info "Waiting for SARA to wake up..."
for i in {1..8}; do
echo -ne " $i/8 seconds\r"
sleep 1
done
echo -e "\n"
#Check SARA connection (ATI)
info "Check SARA connection (ATI)"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 ATI 2 || warning "SARA not detected (ATI). Continuing..."
sleep 1
#set up SARA R4 APN
#info "Set up Monogoto APN"
#/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara_setAPN.py ttyAMA2 data.mono 2
#activate blue network led on the SARA R4
info "Activate blue LED"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+UGPIOC=16,2 2 || warning "SARA LED activation failed. Continuing..."
sleep 1
#get SIM card CCID
info "Get SIM card CCID"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+CCID? 2 || warning "SARA CCID read failed. Continuing..."
sleep 1
#get SIM card IMSI
info "Get SIM card IMSI"
imsi_output=$(/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+CIMI 2 2>&1) || warning "SARA IMSI read failed. Continuing..."
echo "$imsi_output"
# Extract IMSI (15-digit numeric string)
imsi_number=$(echo "$imsi_output" | grep -oP '^\d{15}$' || echo "N/A")
#Connect to network
#info "Connect SARA R4 to network"
#python3 /var/www/nebuleair_pro_4g/SARA/sara_connectNetwork.py ttyAMA2 20810 60
# Set up all systemd services (SARA, NPM, BME280, RTC save_to_db, etc.)
# Single source of truth: services/setup_services.sh
info "Setting up systemd services..."
if [[ -f "$REPO_DIR/services/setup_services.sh" ]]; then
sudo chmod +x "$REPO_DIR/services/setup_services.sh"
sudo "$REPO_DIR/services/setup_services.sh" || warning "Failed to set up systemd services"
success "Systemd services set up successfully."
else
warning "Systemd services setup script not found."
fi
# Display device information
echo ""
echo "=========================================="
echo -e "${GREEN} Installation Complete!${NC}"
echo "=========================================="
# Get Raspberry Pi serial number (last 8 characters)
serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}' | tr '[:lower:]' '[:upper:]')
echo -e "${BLUE}Device ID (Serial):${NC} $serial_number"
# Display IMSI
echo -e "${BLUE}IMSI:${NC} ${imsi_number:-N/A}"
# Get IP address and make it a clickable link
ip_wlan0=$(ip -4 addr show wlan0 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' || echo "Not connected")
if [[ "$ip_wlan0" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
admin_url="http://${ip_wlan0}/html/admin.html"
echo -e "${BLUE}IP Address (wlan0):${NC} ${admin_url}"
else
echo -e "${BLUE}IP Address (wlan0):${NC} $ip_wlan0"
fi
echo "=========================================="