Skip to content

Repository files navigation

Práctica IoT con FIWARE + MQTT

Autor: Manuel Muñoz Rodríguez
Contacto: mmr411@ual.es
Asignatura: Aplicaciones de IoT

Infraestructura completa para la práctica de Aplicaciones de IoT basada en el stack FIWARE con broker MQTT Mosquitto.

Arquitectura

Dispositivo / Script
        │
        │  Publica en MQTT
        │  topic: /practica01/sensor001/attrs
        │  payload: {"t": 25.3, "h": 60}
        ▼
  Mosquitto (1883)
  Broker MQTT
        │
        ▼
  IoT Agent JSON (4041 / 7896)
  Traduce MQTT+JSON → NGSIv2
        │
        ▼
  Orion Context Broker (1026)
  Almacena entidades NGSI
        │
        ▼
  MongoDB (27017)
  Persistencia

Requisitos previos

Mac Apple Silicon (M1/M2/M3): las imágenes de Orion e IoT Agent son linux/amd64 y se ejecutan mediante emulación Rosetta. Funciona correctamente para uso docente.

Estructura del proyecto

Proyecto_completo/
├── docker-compose.yml                    # Definición de servicios
├── mosquitto/
│   ├── config/mosquitto.conf             # Configuración del broker MQTT
│   ├── data/                             # Persistencia de mensajes
│   └── log/                             # Logs de Mosquitto
├── mongodocker/
│   └── data/                            # Persistencia de MongoDB
├── FIWARE_Practica_IoT.postman_collection.json  # Colección Postman
├── README.md                            # Este fichero
└── DOCUMENTACION.md                     # Guía didáctica completa

Servicios y puertos

Servicio Imagen Puerto(s) Descripción
orion telefonicaiot/fiware-orion 1026 Context Broker NGSI v2
iot-agent fiware/iotagent-json:3.4.0 4041 (gestión) / 7896 (datos HTTP) IoT Agent JSON
mqtt-broker eclipse-mosquitto:latest 1883 (MQTT) / 9001 (WebSockets) Broker MQTT
mongo mongo:6.0 27017 (interno) Base de datos

Arrancar el stack

docker compose up -d

Verificar que todos los contenedores están en ejecución:

docker compose ps

Todos deben aparecer como Up o healthy.

Parar el stack

docker compose down

Para eliminar también los datos persistidos:

docker compose down -v
rm -rf mongodocker/data mosquitto/data mosquitto/log

Flujo de la práctica

1. Comprobar servicios (Postman → carpeta 1)

GET http://localhost:1026/version
GET http://localhost:4041/iot/about

2. Familiarizarse con Orion CRUD (Postman → carpeta 2)

Crear, leer, actualizar y borrar entidades directamente en Orion.

3. Aprovisionar el IoT Agent (Postman → carpeta 3)

Crear grupo de servicio:

POST http://localhost:4041/iot/services
Fiware-Service: practica
Fiware-ServicePath: /
{
  "services": [{
    "apikey": "practica01",
    "cbroker": "http://orion:1026",
    "entity_type": "Sensor",
    "resource": "/iot/json"
  }]
}

Registrar dispositivo:

POST http://localhost:4041/iot/devices
Fiware-Service: practica
Fiware-ServicePath: /
{
  "devices": [{
    "device_id": "sensor001",
    "entity_name": "urn:ngsi-ld:Sensor:001",
    "entity_type": "Sensor",
    "transport": "MQTT",
    "apikey": "practica01",
    "attributes": [
      {"object_id": "t", "name": "temperatura", "type": "Float"},
      {"object_id": "h", "name": "humedad",     "type": "Integer"}
    ],
    "static_attributes": [
      {"name": "ubicacion", "type": "Text", "value": "Laboratorio IoT"}
    ]
  }]
}

4. Enviar datos por MQTT

Topic:

/practica01/sensor001/attrs

Payload:

{"t": 25.3, "h": 60}

Con MQTT Explorer: conectar a localhost:1883, publicar en el topic anterior.

Con línea de comandos:

mosquitto_pub -h localhost -p 1883 \
  -t "/practica01/sensor001/attrs" \
  -m '{"t": 25.3, "h": 60}'

5. Verificar en Orion (Postman → carpeta 2)

GET http://localhost:1026/v2/entities/urn:ngsi-ld:Sensor:001?options=keyValues
Fiware-Service: practica
Fiware-ServicePath: /

Respuesta esperada:

{
  "id": "urn:ngsi-ld:Sensor:001",
  "type": "Sensor",
  "temperatura": 25.3,
  "humedad": 60,
  "ubicacion": "Laboratorio IoT"
}

Variables de la colección Postman

Variable Valor Descripción
orion_url http://localhost:1026 URL de Orion
iota_url http://localhost:4041 URL del IoT Agent
fiware_service practica Namespace lógico
entity_id urn:ngsi-ld:Sensor:001 ID de la entidad
device_id sensor001 ID del dispositivo
apikey practica01 Clave del grupo de servicio

Cabeceras HTTP obligatorias

Todas las peticiones al IoT Agent y a Orion (excepto /version y /iot/about) deben incluir:

Fiware-Service: practica
Fiware-ServicePath: /

Sin estas cabeceras las peticiones buscan en un namespace diferente y no encuentran los datos.

About

Asignatura Aplicaciones de IoT 2024

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors