Skip to content

Protocolo Mush2 v1 — Especificación MQTT ​

Versión del protocolo: 1.0.0 Estado: Estable Aplica a: Firmware v0.8.0+, Backend v0.8.0+


1. Estructura de Tópicos ​

mush2/{tipo}/{deviceId}/{accion}
SegmentoDescripciónValores
mush2Raíz del proyecto fija—
{tipo}Categoríatelemetry, state, cmd, event
{deviceId}ID del dispositivoEj: esp8266_001
{accion}Acción específicasensors, state, actuator, config, ota, boot, ack, alarm, online

2. Tópicos ​

2.1 Telemetría (Firmware → Backend) ​

TópicoQoSRetain
mush2/telemetry/{deviceId}/sensors1No
mush2/telemetry/{deviceId}/state1Sí

2.2 Comandos (Backend → Firmware) ​

TópicoQoSRetain
mush2/cmd/{deviceId}/actuator1No
mush2/cmd/{deviceId}/config1No
mush2/cmd/{deviceId}/ota1No

2.3 Eventos (Firmware → Backend) ​

TópicoQoSRetain
mush2/event/{deviceId}/boot1No
mush2/event/{deviceId}/alarm1No
mush2/event/{deviceId}/ack1No

2.4 Estado (Firmware → Broker) ​

TópicoQoSRetain
mush2/state/{deviceId}/online1Sí (LWT)

3. Formatos de Mensaje ​

3.1 Telemetría de Sensores ​

Tópico: mush2/telemetry/{deviceId}/sensorsFrecuencia: Cada 10s

json
{
  "protocol": "1.0.0",
  "deviceId": "esp8266_001",
  "ts": 1718201234,
  "sensors": {
    "temperature": 24.5,
    "humidity": 85.2,
    "co2": 420,
    "voc": 15
  },
  "status": {
    "state": "NORMAL",
    "mode": "LOCAL",
    "uptime": 12345,
    "wifiRssi": -65,
    "fwVersion": "0.8.0"
  }
}

3.2 Estado del Dispositivo ​

Tópico: mush2/telemetry/{deviceId}/stateFrecuencia: Cada 60s

json
{
  "protocol": "1.0.0",
  "deviceId": "esp8266_001",
  "ts": 1718201234,
  "actuators": [
    { "channel": 1, "state": "ON" },
    { "channel": 2, "state": "OFF" },
    { "channel": 3, "state": "ON" },
    { "channel": 4, "state": "OFF" }
  ],
  "mode": "LOCAL"
}

3.3 Comando a Actuador ​

Tópico: mush2/cmd/{deviceId}/actuator

json
{
  "protocol": "1.0.0",
  "cmdId": "cmd_1740000000000",
  "ts": 1740000000,
  "target": "actuator",
  "channel": 1,
  "command": "ON"
}

Respuesta (ACK): mush2/event/{deviceId}/ack

json
{
  "protocol": "1.0.0",
  "cmdId": "cmd_1740000000000",
  "deviceId": "esp8266_001",
  "ts": 1740000001,
  "status": "OK",
  "actuatorState": { "channel": 1, "state": "ON" }
}

3.4 Comando de Configuración ​

Tópico: mush2/cmd/{deviceId}/config

json
{
  "protocol": "1.0.0",
  "cmdId": "cmd_1740000000000",
  "ts": 1740000000,
  "target": "config",
  "tempMin": 20.0,
  "tempMax": 24.0,
  "humMin": 85.0,
  "humMax": 95.0,
  "co2Max": 1200,
  "mode": "LOCAL"
}

Campos opcionales — solo se actualizan los incluidos. mode acepta LOCAL, REMOTE, OFF.

3.5 Comando OTA ​

Tópico: mush2/cmd/{deviceId}/ota

json
{
  "protocol": "1.0.0",
  "cmdId": "cmd_1740000000000",
  "ts": 1740000000,
  "target": "ota",
  "action": "activate"
}

O para actualización HTTP:

json
{
  "protocol": "1.0.0",
  "cmdId": "cmd_1740000000000",
  "ts": 1740000000,
  "target": "ota",
  "action": "update",
  "url": "http://ejemplo.com/firmware.bin"
}
ActionDescripción
activateActiva ArduinoOTA por 120s
updateDescarga firmware desde url y flashea

3.6 Evento de Boot ​

Tópico: mush2/event/{deviceId}/boot

json
{
  "protocol": "1.0.0",
  "deviceId": "esp8266_001",
  "ts": 1718201000,
  "event": "BOOT",
  "bootCount": 0,
  "fwVersion": "0.8.0"
}

3.7 Alarma ​

Tópico: mush2/event/{deviceId}/alarm

json
{
  "protocol": "1.0.0",
  "deviceId": "esp8266_001",
  "ts": 1718201234,
  "event": "ALARM",
  "reason": "HIGH_TEMP:28.5"
}

Razones posibles: HIGH_TEMP, LOW_TEMP, HIGH_HUM, LOW_HUM, HIGH_CO2.

3.8 LWT (Last Will and Testament) ​

Tópico: mush2/state/{deviceId}/online

json
{
  "deviceId": "esp8266_001",
  "status": "OFFLINE",
  "ts": 1718201234
}

4. Códigos de Error (ACK) ​

CódigoSignificado
OKComando ejecutado
INVALID_CHANNELCanal fuera de rango (1-4)
INVALID_STATEEstado no válido
BUSYMínimo tiempo ON no cumplido
INVALID_PAYLOADJSON mal formado
UNKNOWN_CMDComando no reconocido

5. Versionado ​

El campo protocol en todo mensaje indica la versión usada.

VersiónEstado
1.0.0Actual

6. Secuencia Completa ​

Boot:
  Firmware → mush2/event/{id}/boot
  Firmware → mush2/state/{id}/online → ONLINE (retain)

Cada 10s:
  Firmware → mush2/telemetry/{id}/sensors → {temperature, humidity, co2, voc}
  Firmware → HTTP → ThingSpeak (field1=temp&field2=hum&field3=co2&field4=voc)

Cada 60s:
  Firmware → mush2/telemetry/{id}/state → {actuators, mode}

Usuario enciende actuador:
  Frontend → REST → Backend → mush2/cmd/{id}/actuator (QoS 1)
  Firmware → mush2/event/{id}/ack → OK
  Backend → SSE → Frontend

Desconexión:
  Broker → mush2/state/{id}/online → OFFLINE (LWT retain)

Mush2 — Sistema IoT de control ambiental