# EMQX - Configuración para iot.lambicall.com

## Estado Actual

EMQX ya está instalado y funcionando en tu servidor:

- **Versión**: 5.8.4
- **Estado**: Activo y funcionando
- **Servicio**: systemd (emqx.service)
- **SSL/TLS**: ✓ Configurado y funcionando
- **Certificado**: Let's Encrypt (válido hasta Mar 6, 2026)

## Acceso al Dashboard

### URL de acceso
```
http://iot.lambicall.com:18083
```

### Credenciales por defecto
- **Usuario**: admin
- **Contraseña**: public

**IMPORTANTE**: Cambia la contraseña inmediatamente después del primer inicio de sesión.

## Puertos MQTT Activos

| Puerto | Protocolo | SSL/TLS | Descripción |
|--------|-----------|---------|-------------|
| 1883 | MQTT TCP | No | Conexión MQTT sin cifrar |
| 8883 | MQTT SSL/TLS | **Sí ✓** | Conexión MQTT cifrada con Let's Encrypt |
| 8083 | WebSocket | No | MQTT sobre WebSocket sin cifrar |
| 8084 | WebSocket SSL | **Sí ✓** | MQTT sobre WebSocket cifrado con Let's Encrypt |
| 18083 | HTTP | No | Dashboard Web y API REST |

**IMPORTANTE**: Se recomienda usar los puertos 8883 (MQTTS) o 8084 (WSS) para conexiones en producción.

## Configuración del Firewall

Si tienes un firewall activo, asegúrate de permitir estos puertos:

```bash
# MQTT TCP/SSL
sudo ufw allow 1883/tcp comment 'EMQX MQTT'
sudo ufw allow 8883/tcp comment 'EMQX MQTT SSL'

# WebSocket
sudo ufw allow 8083/tcp comment 'EMQX WebSocket'
sudo ufw allow 8084/tcp comment 'EMQX WebSocket SSL'

# Dashboard
sudo ufw allow 18083/tcp comment 'EMQX Dashboard'
```

## Comandos de Administración

### Ver estado del servicio
```bash
sudo systemctl status emqx
# o
sudo emqx ctl status
```

### Iniciar/Detener/Reiniciar
```bash
sudo systemctl start emqx
sudo systemctl stop emqx
sudo systemctl restart emqx
```

### Ver logs en tiempo real
```bash
sudo journalctl -u emqx -f
```

### Ver estadísticas del broker
```bash
emqx ctl broker stats
```

### Listar clientes conectados
```bash
emqx ctl clients list
```

### Ver temas (topics) activos
```bash
emqx ctl topics list
```

## Pruebas de Conexión MQTT

### Instalación de herramientas de prueba
```bash
sudo apt-get install mosquitto-clients -y
```

### Suscribirse a un tema
```bash
mosquitto_sub -h iot.lambicall.com -t "test/topic" -p 1883 -v
```

### Publicar un mensaje
```bash
mosquitto_pub -h iot.lambicall.com -t "test/topic" -m "Hola desde EMQX" -p 1883
```

### Ejemplo con autenticación (si está configurada)
```bash
mosquitto_pub -h iot.lambicall.com -t "test/topic" -m "Mensaje" -u "usuario" -P "password" -p 1883
```

## Configuración Avanzada

### Archivos de configuración
Los archivos de configuración de EMQX se encuentran en:
```
/etc/emqx/
/var/lib/emqx/
```

### Dashboard - Opciones de configuración

Desde el dashboard web puedes configurar:

1. **Authentication** (Autenticación)
   - Built-in Database
   - HTTP
   - JWT
   - LDAP
   - MySQL/PostgreSQL
   - Redis

2. **Authorization** (Control de acceso)
   - Reglas de ACL
   - Permisos por cliente/usuario
   - Control de acceso a topics

3. **Rules Engine** (Motor de reglas)
   - Procesamiento de mensajes
   - Transformación de datos
   - Integración con bases de datos

4. **Integrations** (Integraciones)
   - Webhooks
   - Kafka
   - RabbitMQ
   - Bases de datos (MySQL, PostgreSQL, MongoDB, etc.)
   - Servicios en la nube

## Configuración SSL/TLS

**✓ SSL/TLS ya está configurado y funcionando**

- Certificados Let's Encrypt instalados
- Puertos seguros: 8883 (MQTTS) y 8084 (WSS)
- Renovación automática de certificados configurada
- Válido hasta: Mar 6, 2026

### Conexión segura con SSL:
```bash
# MQTT con SSL
mosquitto_pub -h iot.lambicall.com -p 8883 -t "test/topic" -m "Mensaje seguro" --capath /etc/ssl/certs/

# Suscribirse con SSL
mosquitto_sub -h iot.lambicall.com -p 8883 -t "test/topic" -v --capath /etc/ssl/certs/
```

### Probar configuración SSL:
```bash
/var/www/html/emqx/test-ssl.sh
```

**Para documentación completa sobre SSL/TLS**, ver:
```bash
cat /var/www/html/EMQX_SSL_CONFIG.md
```

Este archivo incluye:
- Ejemplos de código para JavaScript/Node.js, Python, ESP32/Arduino
- Configuración de WebSocket seguro (WSS)
- Troubleshooting SSL
- Configuración de autenticación mutua (mTLS)
- Y mucho más...

## Ejemplo de Cliente MQTT (JavaScript)

```javascript
const mqtt = require('mqtt');

const client = mqtt.connect('mqtt://iot.lambicall.com:1883', {
    clientId: 'cliente_' + Math.random().toString(16).substr(2, 8),
    clean: true,
    connectTimeout: 4000,
    // username: 'tu_usuario',
    // password: 'tu_password',
    reconnectPeriod: 1000,
});

client.on('connect', () => {
    console.log('Conectado a EMQX');
    client.subscribe('test/topic', (err) => {
        if (!err) {
            client.publish('test/topic', 'Hola desde Node.js');
        }
    });
});

client.on('message', (topic, message) => {
    console.log(`Mensaje recibido en ${topic}: ${message.toString()}`);
});
```

## Ejemplo de Cliente MQTT (Python)

```python
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(f"Conectado con código: {rc}")
    client.subscribe("test/topic")

def on_message(client, userdata, msg):
    print(f"Mensaje recibido en {msg.topic}: {msg.payload.decode()}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

# client.username_pw_set("usuario", "password")
client.connect("iot.lambicall.com", 1883, 60)

client.loop_forever()
```

## Monitoreo y Estadísticas

### API REST

EMQX proporciona una API REST completa disponible en:
```
http://iot.lambicall.com:18083/api/v5/
```

Ejemplo de uso:
```bash
# Obtener estadísticas
curl -X GET http://iot.lambicall.com:18083/api/v5/stats \
  -u admin:public

# Listar clientes conectados
curl -X GET http://iot.lambicall.com:18083/api/v5/clients \
  -u admin:public
```

## Backup y Mantenimiento

### Backup de datos
```bash
# Detener EMQX
sudo systemctl stop emqx

# Hacer backup de datos
sudo tar -czf emqx-backup-$(date +%Y%m%d).tar.gz /var/lib/emqx/

# Iniciar EMQX
sudo systemctl start emqx
```

### Ver uso de recursos
```bash
emqx ctl vm
```

## Recursos Adicionales

- Documentación oficial: https://www.emqx.io/docs/en/latest/
- API REST: https://www.emqx.io/docs/en/latest/admin/api.html
- GitHub: https://github.com/emqx/emqx

## Notas Importantes

1. Cambia las credenciales por defecto (admin/public)
2. Configura autenticación para producción
3. Habilita SSL/TLS para comunicaciones seguras
4. Realiza backups regulares de /var/lib/emqx/
5. Monitorea los logs regularmente
6. Mantén EMQX actualizado con las últimas versiones de seguridad

---

EMQX está listo para recibir conexiones MQTT en iot.lambicall.com
