# Quick Start Guide - Modular App ## 🚀 Getting Started ### 1. Run the New Modular App ```bash cd /srv/prezenta_work python3 app_modular.py ``` ### 2. Expected Output ``` ====================================================================== PREZENTA WORK - Attendance Tracking System v2.7 (Modular) ====================================================================== [1/5] Checking dependencies... [2/5] Verifying dependencies... [3/5] Performing system initialization... [4/5] Retrieving device information... Final result - Hostname: rpi-prezenta-1, Device IP: 192.168.1.50 [5/5] Setting up logging... ====================================================================== Initialization complete! ====================================================================== Registering API routes... ✓ API routes registered ====================================================================== Starting Flask server... ====================================================================== * Serving Flask app 'Flask' * Running on http://0.0.0.0:80 ``` ### 3. Test the API ```bash # In another terminal # Get device status curl http://localhost/status # Execute a command curl -X POST http://localhost/execute_command \ -H "Content-Type: application/json" \ -d '{"command": "uptime"}' # Check for updates curl -X POST http://localhost/auto_update ``` --- ## 🔧 Configuration ### Method 1: Environment Variables ```bash export MONITORING_SERVER_HOST=192.168.1.100 export FLASK_PORT=8080 python3 app_modular.py ``` ### Method 2: .env File Create `.env` in `/srv/prezenta_work/`: ```env MONITORING_SERVER_HOST=192.168.1.100 AUTO_UPDATE_SERVER_PASSWORD=your_password FLASK_PORT=80 ``` Then run: ```bash python3 app_modular.py ``` ### Method 3: Edit config_settings.py Directly modify `/srv/prezenta_work/config_settings.py` --- ## 📁 Important Files | File | Purpose | |------|---------| | `config_settings.py` | **All configuration settings** | | `./data/idmasa.txt` | Table/room name (used in all logs) | | `./data/device_info.txt` | Cached device hostname & IP | | `./data/log.txt` | Application logs | | `.env` | Environment-specific secrets | --- ## 🌐 API Endpoints ### GET /status Returns device status information. **Response:** ```json { "hostname": "rpi-prezenta-1", "device_ip": "192.168.1.50", "nume_masa": "TABLE_05", "timestamp": "2025-12-18 14:30:45", "uptime": " 14:30:45 up 45 days, 23:15, 1 user", "disk_usage": "Filesystem...", "memory_usage": "Mem: 3888 2156 1732" } ``` --- ### POST /execute_command Execute allowed system commands. **Request:** ```json { "command": "uptime" } ``` **Response:** ```json { "status": "success", "message": "Command executed successfully", "output": " 14:30:45 up 45 days, 23:15, 1 user, load average: 0.12, 0.15, 0.10" } ``` **Allowed Commands:** - `sudo apt update` - `sudo apt upgrade -y` - `sudo apt autoremove -y` - `sudo apt autoclean` - `sudo reboot` - `sudo shutdown -h now` - `df -h` - `free -m` - `uptime` - `systemctl status` - `sudo systemctl restart networking` - `sudo systemctl restart ssh` --- ### POST /auto_update Trigger automatic application update. **Response (No Update):** ```json { "status": "no_update_needed", "current_version": 2.7, "remote_version": 2.7, "message": "Application is already up to date" } ``` **Response (Update Available):** ```json { "status": "success", "message": "Updated from version 2.7 to 2.8. Device restarting...", "old_version": 2.7, "new_version": 2.8, "restart_scheduled": true } ``` --- ## 📊 Logging ### Local Logs - **Location:** `./data/log.txt` - **Format:** `YYYY-MM-DD HH:MM:SS - LEVEL - message` - **Retention:** 10 days (auto-rotated) ### Remote Logs - **Endpoint:** `http://rpi-ansible:80/logs` - **Format:** JSON with hostname, IP, table name, and message - **Sent automatically** when events occur --- ## 🔍 Troubleshooting ### Port 80 Permission Denied ```bash # Solution: Run with sudo or set port capability sudo setcap cap_net_bind_service=ep $(which python3) python3 app_modular.py ``` ### Cannot Connect to Monitoring Server ```bash # Check configuration cat config_settings.py | grep MONITORING # Test connectivity ping rpi-ansible ``` ### RFID Reader Not Detected ```bash # Check if user is in dialout group sudo usermod -a -G dialout $USER sudo reboot # Verify device exists ls -l /dev/ttyS0 /dev/ttyAMA0 /dev/ttyUSB0 ``` ### Logs Not Sending to Server ```bash # Check network connectivity ping 8.8.8.8 # Check log file tail -f ./data/log.txt # Verify server is running on expected port curl http://rpi-ansible:80/logs ``` --- ## 📝 Configuration Examples ### Example 1: Custom Server Address ```bash export MONITORING_SERVER_HOST=192.168.1.100 export FLASK_PORT=8080 python3 app_modular.py ``` ### Example 2: Different Update Server ```bash export AUTO_UPDATE_SERVER_HOST=update-server.local export AUTO_UPDATE_SERVER_USER=admin export AUTO_UPDATE_SERVER_PASSWORD=secure_pass python3 app_modular.py ``` ### Example 3: Using .env File ```bash cat > .env << EOF MONITORING_SERVER_HOST=192.168.1.100 AUTO_UPDATE_SERVER_PASSWORD=Initial01! CONNECTIVITY_CHECK_HOST=10.76.140.17 FLASK_PORT=80 EOF python3 app_modular.py ``` --- ## 🔄 Module Dependencies When running `app_modular.py`, the startup sequence is: 1. **config_settings.py** - Load configuration 2. **dependencies_module.py** - Check/install packages 3. **system_init_module.py** - Initialize system 4. **device_module.py** - Get device info 5. **logger_module.py** - Setup logging 6. **connectivity_module.py** - Start background monitor 7. **rfid_module.py** - Initialize RFID reader 8. **api_routes_module.py** - Register Flask routes 9. **Flask** - Start HTTP server Each step must complete (with possible warnings) before proceeding. --- ## ✅ Verification Checklist - [ ] App starts without errors - [ ] Can reach `/status` endpoint - [ ] Can execute `/execute_command` endpoint - [ ] Logs appear in `./data/log.txt` - [ ] Logs send to monitoring server - [ ] Configuration changes via environment variables work - [ ] RFID reader initializes (or graceful failure) - [ ] Connectivity monitor runs in background --- ## 📞 Support | Issue | Check | |-------|-------| | Port conflict | `lsof -i :80` | | Permission denied | `whoami`, check `sudoers` | | Missing packages | `pip list | grep rdm6300` | | Network issues | `ping 8.8.8.8` | | Server not responding | `curl http://server:port/logs` | --- ## 🔗 Related Documentation - **[MODULAR_ARCHITECTURE.md](MODULAR_ARCHITECTURE.md)** - Detailed architecture guide - **[REFACTORING_COMPLETE.md](REFACTORING_COMPLETE.md)** - Refactoring summary - **[../PREZENTA_WORK_ANALYSIS.md](../PREZENTA_WORK_ANALYSIS.md)** - Client analysis - **config_settings.py** - All configuration options --- **Ready to go!** 🚀 Run: `python3 app_modular.py`