#!/bin/bash # File: /var/www/nebuleair_pro_4g/services/setup_services.sh # Purpose: Set up all systemd services for NebuleAir data collection # to install: # sudo chmod +x /var/www/nebuleair_pro_4g/services/setup_services.sh # sudo /var/www/nebuleair_pro_4g/services/setup_services.sh echo "Setting up NebuleAir systemd services and timers..." # Create directory for logs if it doesn't exist mkdir -p /var/www/nebuleair_pro_4g/logs # Create service and timer files for NPM Data cat > /etc/systemd/system/nebuleair-npm-data.service << 'EOL' [Unit] Description=NebuleAir NPM Data Collection Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/NPM/get_data_modbus_v3.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/npm_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/npm_service_errors.log [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-npm-data.timer << 'EOL' [Unit] Description=Run NebuleAir NPM Data Collection every 10 seconds Requires=nebuleair-npm-data.service [Timer] OnBootSec=10s OnUnitActiveSec=10s AccuracySec=1s [Install] WantedBy=timers.target EOL # Create service and timer files for Envea Data cat > /etc/systemd/system/nebuleair-envea-data.service << 'EOL' [Unit] Description=NebuleAir Envea Data Collection Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/envea/read_value_v2.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/envea_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/envea_service_errors.log [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-envea-data.timer << 'EOL' [Unit] Description=Run NebuleAir Envea Data Collection every 10 seconds Requires=nebuleair-envea-data.service [Timer] OnBootSec=10s OnUnitActiveSec=10s AccuracySec=1s [Install] WantedBy=timers.target EOL # Create service and timer files for SARA Data (No Lock File Needed) cat > /etc/systemd/system/nebuleair-sara-data.service << 'EOL' [Unit] Description=NebuleAir SARA Data Transmission Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/loop/SARA_send_data_v2.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/sara_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/sara_service_errors.log RuntimeMaxSec=200s [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-sara-data.timer << 'EOL' [Unit] Description=Run NebuleAir SARA Data Transmission every 60 seconds Requires=nebuleair-sara-data.service [Timer] OnBootSec=60s OnUnitActiveSec=60s AccuracySec=1s # This is the key setting that prevents overlap Persistent=true [Install] WantedBy=timers.target EOL # Create service and timer files for BME280 Data cat > /etc/systemd/system/nebuleair-bme280-data.service << 'EOL' [Unit] Description=NebuleAir BME280 Data Collection Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/BME280/get_data_v2.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/bme280_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/bme280_service_errors.log [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-bme280-data.timer << 'EOL' [Unit] Description=Run NebuleAir BME280 Data Collection every 120 seconds Requires=nebuleair-bme280-data.service [Timer] OnBootSec=120s OnUnitActiveSec=120s AccuracySec=1s [Install] WantedBy=timers.target EOL # Create service and timer files for MPPT Data cat > /etc/systemd/system/nebuleair-mppt-data.service << 'EOL' [Unit] Description=NebuleAir MPPT Data Collection Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/MPPT/read.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/mppt_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/mppt_service_errors.log [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-mppt-data.timer << 'EOL' [Unit] Description=Run NebuleAir MPPT Data Collection every 120 seconds Requires=nebuleair-mppt-data.service [Timer] OnBootSec=120s OnUnitActiveSec=120s AccuracySec=1s [Install] WantedBy=timers.target EOL # Create service and timer files for Database Cleanup cat > /etc/systemd/system/nebuleair-db-cleanup-data.service << 'EOL' [Unit] Description=NebuleAir Database Cleanup Service After=network.target [Service] Type=oneshot ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/sqlite/flush_old_data.py User=root WorkingDirectory=/var/www/nebuleair_pro_4g StandardOutput=append:/var/www/nebuleair_pro_4g/logs/db_cleanup_service.log StandardError=append:/var/www/nebuleair_pro_4g/logs/db_cleanup_service_errors.log [Install] WantedBy=multi-user.target EOL cat > /etc/systemd/system/nebuleair-db-cleanup-data.timer << 'EOL' [Unit] Description=Run NebuleAir Database Cleanup daily Requires=nebuleair-db-cleanup-data.service [Timer] OnBootSec=1h OnUnitActiveSec=24h AccuracySec=1h [Install] WantedBy=timers.target EOL # Reload systemd to recognize new services systemctl daemon-reload # Enable and start all timers echo "Enabling and starting all services..." for service in npm envea sara bme280 mppt db-cleanup; do systemctl enable nebuleair-$service-data.timer systemctl start nebuleair-$service-data.timer echo "Started nebuleair-$service-data timer" done echo "Checking status of all timers..." systemctl list-timers | grep nebuleair echo "Setup complete. All NebuleAir services are now running." echo "To check the status of a specific service:" echo " sudo systemctl status nebuleair-npm-data.service" echo "To view logs for a specific service:" echo " sudo journalctl -u nebuleair-npm-data.service" echo "To restart a specific timer:" echo " sudo systemctl restart nebuleair-npm-data.timer"