Ir al contenido

IoT y Telemetria

Nekazari ingesta datos de sensores a traves del FIWARE IoT Agent JSON sobre MQTT. Los dispositivos publican payloads JSON ligeros; la plataforma los traduce en entidades NGSI-LD semanticamente ricas usando Smart Data Models.

Datalogger / Sensor
▼ MQTT (payload JSON)
Mosquitto Broker
▼ /<apikey>/<device_id>/attrs
IoT Agent JSON (NGSI-LD nativo)
│ explicitAttrs: true
▼ Solo pasan atributos del perfil
Orion-LD Context Broker
▼ Suscripcion NGSI-LD
Telemetry Worker → TimescaleDB

Todo sensor IoT debe tener un DeviceProfile antes del provisionamiento. El perfil define como las claves crudas del datalogger se mapean a atributos SDM estandar.

CampoDescripcion
incoming_keyClave enviada por el datalogger via MQTT (ej. t_ext)
target_attributeAtributo SDM en Orion-LD (ej. airTemperature)
typeTipo de dato (Number, Text)
transformationExpresion JEXL opcional (ej. val * 0.1)
{
"name": "Estacion Agrivoltaica",
"sdm_entity_type": "AgriSensor",
"mappings": [
{ "incoming_key": "airTemperature", "target_attribute": "airTemperature", "type": "Number" },
{ "incoming_key": "solarRadiation", "target_attribute": "solarRadiation", "type": "Number" },
{ "incoming_key": "relativeHumidity", "target_attribute": "relativeHumidity", "type": "Number" },
{ "incoming_key": "soilMoisture", "target_attribute": "soilMoisture", "type": "Number" }
]
}

Los perfiles se pueden crear en la UI de la plataforma, importar como JSON, o auto-generar desde gateways DaTaK.

  1. Crear un DeviceProfile con los mapeos de atributos para tu datalogger
  2. Crear un sensor en el Entity Wizard — seleccionar el perfil (obligatorio)
  3. Copiar las credenciales MQTT mostradas tras la creacion (se muestran una sola vez, no son recuperables)
  4. Configurar el datalogger con el host MQTT, puerto, topic y credenciales

La plataforma almacena refDeviceProfile como una Relationship NGSI-LD en la entidad. La regeneracion de claves preserva el mapeo del perfil.

PropiedadValor
BrokerMosquitto (TLS en puerto 8883, plano en 31883)
Topic/<tenant_apikey>/<device_id>/attrs
Payload{"nombreAtributo": valor} (JSON plano)
AuthUsuario + contrasena (del provisionamiento)
Ventana de terminal
# Ejemplo de publicacion
mosquitto_pub -h nkz.robotika.cloud -p 31883 \
-u <usuario> -P <contrasena> \
-t "/<apikey>/<device_id>/attrs" \
-m '{"airTemperature": 22.5, "solarRadiation": 450}'

El IoT Agent funciona con IOTA_EXPLICIT_ATTRS=true. Solo los atributos declarados en el DeviceProfile llegan a Orion-LD. Las claves MQTT no declaradas se descartan silenciosamente. Esto garantiza que el gemelo digital solo contenga datos validados y conformes al estandar.

DaTaK es un gateway edge open-source que recopila datos de sensores locales (Modbus, CANbus, MQTT) y los publica en Nekazari. Incluye:

  • Smart Auto-SDM Mapping: infiere nombres de atributos SDM a partir de los nombres de sensores (ej. “Piranometro solar” se convierte en solarRadiation)
  • Generacion de perfiles: GET /api/config/device-profile devuelve un JSON listo para importar en el wizard de la plataforma
  • Resiliencia offline: almacena datos localmente cuando no hay conectividad

Configura la seccion digital_twin en configs/gateway.yaml con las credenciales MQTT del wizard.

AtributoDescripcionUnidad
airTemperatureTemperatura del aireCEL
relativeHumidityHumedad relativaP1 (%)
atmosphericPressurePresion atmosfericaHPA
solarRadiationRadiacion solarW/m2
windSpeedVelocidad del vientom/s
windDirectionDireccion del vientoDD
precipitationPrecipitacionmm
soilMoistureHumedad volumetrica del sueloP1 (%)
soilTemperatureTemperatura del sueloCEL
leafTemperatureTemperatura de hojaCEL
photosyntheticallyActiveRadiationPARumol/m2s
panelTemperatureTemperatura de panel FVCEL
energyProductionProduccion de energiakWh
batteryLevelNivel de bateriaP1 (%)