Backend centralizado para gestionar dispositivos ESP32 con MiniOS WiFi.
- Node.js 18+
- npm
# Instalar dependencias
npm install
# Iniciar en desarrollo
npm run dev
# Iniciar en producción
npm startVariables de entorno (opcional):
PORT=3001
JWT_SECRET=tu-clave-secreta-aqui
TZ=America/Argentina/Buenos_Aires # Zona horaria del servidor (UTC-3)El sistema está configurado por defecto para UTC-3 (Argentina/Brasil). Los timestamps se muestran en esta zona horaria tanto en el dashboard como en los logs.
Para cambiar la zona horaria:
-
En el servidor: Establecer la variable de entorno
TZantes de iniciar:export TZ=America/Sao_Paulo # Brasil (UTC-3) # o export TZ=America/Mexico_City # México (UTC-6) # o export TZ=Europe/Madrid # España (UTC+1/+2) npm start
-
En el frontend: Editar
public/js/app.jslínea 709, cambiar la zona horaria:timeZone: 'America/Argentina/Buenos_Aires' // Cambiar aquí
Nota: Los timestamps se almacenan en UTC en la base de datos (buena práctica) y se convierten al mostrarlos.
- Iniciar el servidor:
npm start - Abrir en navegador:
http://localhost:3001 - Usuario por defecto:
admin/admin123 - Cambiar la contraseña inmediatamente
POST /api/auth/login- Iniciar sesiónGET /api/auth/verify- Verificar tokenPOST /api/auth/change-password- Cambiar contraseña
GET /api/devices- Listar dispositivosGET /api/devices/:id- Obtener dispositivoPUT /api/devices/:id- Actualizar dispositivoDELETE /api/devices/:id- Eliminar dispositivo
GET /api/devices/:id/gpio- Obtener configuración GPIOPOST /api/devices/:id/gpio- Configurar GPIOPOST /api/devices/:id/gpio/:pin/set- Establecer valor GPIO
GET /api/devices/:id/dht- Obtener configuración DHTPOST /api/devices/:id/dht- Configurar DHT
GET /api/ota/firmware- Listar firmwarePOST /api/ota/firmware/upload- Subir firmwarePOST /api/ota/firmware/:id/activate- Activar firmwarePOST /api/ota/update/:deviceId- Actualizar dispositivoPOST /api/ota/update-all- Actualizar todos
/ws/device- Conexión para dispositivos ESP32/ws/dashboard- Conexión para dashboard web
{
"type": "register",
"mac_address": "AA:BB:CC:DD:EE:FF",
"firmware_version": "1.0.0",
"ip_address": "192.168.1.100"
}
{
"type": "data",
"mac_address": "AA:BB:CC:DD:EE:FF",
"payload": {
"temperature": 25.5,
"humidity": 60,
"gpio": [{"pin": 2, "value": 1}]
}
}{
"type": "config",
"device_id": 1,
"gpio": [...],
"dht": [...],
"ota": null
}
{
"type": "command",
"action": "set_gpio",
"pin": 2,
"value": 1
}
{
"type": "command",
"action": "ota_update",
"ota_id": 1,
"version": "1.0.1",
"filename": "firmware.bin",
"checksum": "abc123",
"filesize": 512000
}MiniOS_Backend/
├── src/
│ ├── index.js # Entry point
│ ├── websocket.js # WebSocket server
│ ├── db/
│ │ ├── database.js # SQLite wrapper
│ │ └── schema.sql # Database schema
│ └── routes/
│ ├── api.js # REST API
│ ├── auth.js # Authentication
│ └── ota.js # OTA management
├── public/ # Dashboard web
├── firmware/ # Uploaded .bin files
├── minios.db # SQLite database
└── package.json
# Instalar PM2
npm install -g pm2
# Iniciar aplicación
pm2 start src/index.js --name minios
# Auto-inicio en reboot
pm2 startup
pm2 saveserver {
listen 80;
server_name tu-dominio.com;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}Para actualizar el servidor con los últimos cambios del repositorio:
# Conectar al servidor VPS
ssh usuario@tu-servidor.com
# Ir al directorio del proyecto
cd /ruta/a/MiniOS_Backend
# Obtener los últimos cambios
git pull origin main
# Instalar nuevas dependencias (si las hay)
npm install
# Reiniciar la aplicación con PM2
pm2 restart minios
# Ver logs para verificar que funciona
pm2 logs minios# Conectar al servidor VPS
ssh usuario@tu-servidor.com
# Ir al directorio del proyecto
cd /ruta/a/MiniOS_Backend
# Obtener los últimos cambios
git pull origin main
# Instalar nuevas dependencias (si las hay)
npm install
# Detener el proceso actual (Ctrl+C si está corriendo en terminal)
# O encontrar y matar el proceso:
pkill -f "node src/index.js"
# Iniciar de nuevo
npm start# Verificar que el servidor está corriendo
pm2 status # Si usas PM2
# Probar el endpoint de salud (opcional, si lo tienes configurado)
curl http://localhost:3001
# Ver logs en tiempo real
pm2 logs minios --lines 50 # Con PM2
# o
tail -f logs/app.log # Si tienes logs configuradosSi algo sale mal después de actualizar:
# Ver commits recientes
git log --oneline -5
# Volver al commit anterior
git reset --hard HEAD~1
# Reiniciar aplicación
pm2 restart minios-
Backup: Siempre haz backup de la base de datos antes de actualizar:
cp minios.db minios.db.backup.$(date +%Y%m%d_%H%M%S) -
Permisos: Asegúrate de tener permisos de escritura en el directorio
ls -la
-
Variables de Entorno: Verifica que las variables de entorno sigan configuradas correctamente después de actualizar
-
WebSocket: Los cambios en WebSocket requieren que los dispositivos ESP32 se reconecten automáticamente
MIT