Míralo en funcionamiento.
Abre el panel de la cantera y reproduce una ejecución grabada.
Cómo se procesa un mensaje.
Un dispositivo envía un mensaje por MQTT, HTTP, Sparkplug B o LwM2M. Tras decodificar el mensaje e identificar el dispositivo, DeviceChain pasa el evento a los servicios que lo almacenan, actualizan el estado del dispositivo y evalúan tus reglas. Las reglas coincidentes activan acciones. Los servicios se comunican mediante NATS JetStream.
Los clientes o las unidades de negocio pueden compartir una instalación, con aislamiento entre tenants en la base de datos y el bus de mensajes. El operador administra la instalación y sus tenants. La documentación de multitenencia explica el aislamiento.
Ingesta
MQTT en el broker NATS integrado, HTTP POST, una aplicación host Sparkplug B y un servidor LwM2M sobre CoAP/DTLS. Los dos últimos son servicios opcionales. La matriz de transportes detalla lo que admite cada transporte en cada dirección.
Detección
Las reglas tienen condiciones tipadas, como umbral, duración o ausencia. Cada una se expresa como una comparación sencilla o una expresión CEL (Common Expression Language), y se evalúa cuando llegan eventos de los dispositivos que elijas.
Respuesta
Una regla puede activar una alarma, enviar un comando al dispositivo, llamar a un webhook o publicar en MQTT, Kafka, Amazon SNS o Amazon SQS.
Comandos
Los perfiles de dispositivo declaran los comandos y sus parámetros. DeviceChain almacena cada solicitud y sigue su estado, incluida la entrega, la respuesta del dispositivo y los fallos.
Perfiles de dispositivo tipados y versionados.
Los tipos de dispositivo describen equipos como contadores, congeladores o camiones. Cada tipo usa un perfil que define sus mediciones, comandos y reglas de detección. Varios tipos pueden compartir un perfil. Puedes editar un borrador, publicar una versión o volver a una anterior.
Relaciona un dispositivo con su cliente, emplazamiento o activo, y usa esas relaciones para encontrar sus lecturas. Las relaciones tipadas también permiten describir conexiones entre dispositivos y otras entidades.
- Perfiles de dispositivo
- Métricas, definiciones de comandos tipados y reglas de detección, publicadas en versiones.
- Grafo de relaciones
- Relaciones tipadas y dirigidas entre entidades. Puedes declarar atributos como facetas para explorar y filtrar por varios criterios a la vez, como emplazamiento, línea de producto y propietario.
- Grupos dinámicos
- Una expresión CEL sobre los atributos de las entidades. Cada lectura del grupo calcula sus miembros mediante una consulta indexada a la base de datos.
- Clientes, áreas y activos
- Los dispositivos se asignan a clientes, áreas y activos. Los activos se organizan en un árbol de padres e hijos. Las áreas son ubicaciones con nombre; sus límites se dibujan como geocercas independientes. Cada evento registra las relaciones del dispositivo al escribirse, conservando el contexto histórico tras una reasignación.
- Credenciales y sustitución
- El dispositivo conserva un token estable; sus credenciales son independientes y se pueden rotar. Una sola operación sustituye el hardware averiado, retira las credenciales de la unidad anterior y conserva el historial del dispositivo.
- Estado en tiempo real
- El último valor de cada medición y si el dispositivo está conectado. MQTT, Sparkplug B y LwM2M notifican conexiones y desconexiones directamente. Un dispositivo HTTP se considera conectado mientras siga enviando datos.
Prueba una regla con el historial almacenado.
Previsualiza un borrador con eventos almacenados para ver cuándo se habría activado su condición. La previsualización usa el mismo compilador y motor de reglas que el procesamiento en tiempo real.
Ejecuta la previsualización desde el lienzo de automatización antes de publicar. Parte de un estado de reglas vacío, no carga atributos de dispositivos ni aplica el ámbito de grupos, y notifica las lecturas omitidas o los límites alcanzados. La documentación del motor de detección detalla sus límites.
- Tres formas de escribir una regla
- Un formulario en el perfil del dispositivo, un lienzo visual de automatización o una descripción en lenguaje natural cuando está habilitado el servicio opcional de IA.
- Alarmas
- Las alarmas registran los estados activo, reconocido y resuelto, y pueden cambiar de severidad. La resolución depende de la regla; algunas reglas de ventana necesitan nuevos eventos para resolverse.
- Ocho tipos de regla
- Umbral, tasa de cambio, repetición, duración, ausencia, agregado en ventana, correlación de áreas y conectividad. Las reglas de ausencia y conectividad detectan dispositivos que dejan de enviar datos o se desconectan.
- Geocercas
- Dibújalas en la consola o envía polígonos con huecos mediante la API. La condición de una regla puede comprobar la pertenencia con
geo.inFence(...). Cada evento de ubicación lleva la versión de geocercas vigente al llegar; la reproducción usa las geocercas de ese momento. - Ámbito
- Las reglas se definen en un perfil de dispositivo; la mayoría de los tipos se pueden limitar a un grupo dinámico. La pertenencia al grupo se registra en cada evento cuando llega.
Describe una regla en lenguaje natural.
Con el servicio opcional de IA, escribe algo como «activar una alarma de severidad mayor cuando un congelador permanezca por encima de -15°C durante diez minutos» y recibe un borrador de regla. El borrador pasa por el mismo compilador que una regla escrita a mano. El servicio puede revisarlo a partir de los errores del compilador, hasta un límite fijo de intentos. Devuelve un borrador válido o los errores que no pudo resolver. Revisa la regla antes de publicarla: la compilación comprueba su estructura, no si refleja tu intención.
Las reglas publicadas se ejecutan sin llamar al modelo. Para habilitar la creación de reglas con IA, el operador registra el proveedor, pone un modelo a disposición del tenant y registra su consentimiento para la inferencia externa. La opción no está disponible hasta completar los tres pasos. Puedes dejar el servicio deshabilitado.
Paneles versionados que puedes integrar.
Cada panel pertenece a un tenant y admite borradores, versiones publicadas y reversión. Puedes crearlo con datos sintéticos antes de que exista ningún dispositivo y conectar después el mismo diseño a una flota real.
Para mostrar paneles en tu propia aplicación React, instala los paquetes de ejecución desde npm (@devicechain/widgets, @devicechain/dashboards y @devicechain/client). Un visor independiente permite acceder a los paneles sin entrar en la consola de administración.
Consulta tu telemetría con SQL.
La telemetría se almacena en TimescaleDB, una extensión de PostgreSQL. Consúltala directamente con una herramienta compatible, como Metabase, Grafana, Power BI o psql, usando un rol de lectura analítica configurado.
Cada tenant puede tener su propio rol de lectura, con acceso a un esquema analítico de vistas de eventos, mediciones, agregados por minuto, ubicaciones, alertas y cambios de conexión. La base de datos filtra estas vistas al tenant del lector. El acceso a ubicaciones requiere un permiso adicional. La guía de SQL y BI explica la configuración.
- Rol de solo lectura
- Un rol de inicio de sesión por tenant con acceso de lectura a las vistas analíticas. Tú decides qué tenants reciben ese acceso.
- O usa la API
- Las aplicaciones usan la API GraphQL, que lee las mismas tablas sobre las que se construyen las vistas analíticas.
GraphQL, SDK de cliente y MCP.
La API usa GraphQL, con un esquema para cada área de la plataforma, y los archivos de esquema se publican con la documentación. El SDK de TypeScript se publica en npm (@devicechain/client), y el de .NET en NuGet (DeviceChain.Sdk). El SDK de .NET incluye comprobaciones de compilación anticipada; un paquete Unity, compilado desde el código fuente, lo adapta a los transportes de Unity.
Un servidor opcional Model Context Protocol permite que asistentes de IA como Claude, Cursor o VS Code lean dispositivos, estado, telemetría, alarmas y comandos. Las llamadas usan el token y los permisos del usuario conectado. El servidor expone una selección de herramientas de solo lectura, no la API completa.
- GraphQL
- Un esquema por área de la plataforma, con los archivos de esquema publicados.
- SDK
- TypeScript en npm y C#/.NET en NuGet, además del paquete Unity.
- MCP
- Un servidor de recursos OAuth 2.1 con herramientas de solo lectura, limitado al tenant del usuario.
Se ejecuta en Kubernetes, con PostgreSQL y NATS.
Las entidades se almacenan en PostgreSQL y la telemetría en TimescaleDB. NATS JetStream transporta los mensajes internos, actúa como broker MQTT y mantiene el estado clave-valor. La instalación configura estos componentes.
dcctl es un único binario que incluye el chart de Helm y la configuración de OpenTofu. Utiliza docker, kubectl, helm y OpenTofu (o Terraform), que debes instalar antes, además de kind (Kubernetes en Docker) para un clúster local. dcctl install prepara un clúster y dcctl bootstrap crea una instancia en él. Ambos comandos pueden usar un clúster existente. Los flujos de instalación e inicialización se prueban de extremo a extremo en kind, que también permite ejecutar DeviceChain en un portátil. El repositorio incluye una configuración OpenTofu que crea un clúster Google Kubernetes Engine con grupos de nodos separados para bases de datos y servicios.
En un clúster Google Kubernetes Engine con tres nodos de base de datos de 4 vCPU y 16 GB, y tres nodos de servicios de 4 vCPU y 8 GB, una instalación HA con sus valores predeterminados sostuvo 10.000 eventos por segundo durante diez minutos, en cada una de dos versiones de desarrollo que pasaron a formar parte de v0.22.0. Las comprobaciones evento por evento no encontraron eventos almacenados ausentes, duplicados ni inesperados. Los servicios y los líderes de los streams del broker de mensajes se mantuvieron en una misma ubicación equilibrada entre los nodos de servicios; dejando la ubicación al planificador, la versión candidata de v0.19.0 se midió del mismo modo a 6.000 eventos por segundo. Cada evento contenía una lectura. La prueba usó un tenant con su límite de ingesta elevado; con el límite predeterminado de 1.000 lecturas por segundo, los dispositivos de un tenant se admiten como máximo a 5.000 por segundo. La sección de rendimiento medido documenta las condiciones y los recursos. Estos resultados describen esa carga y ese clúster; no son una garantía de capacidad.
La instalación predeterminada también configura Prometheus, Grafana y Alertmanager, con las reglas de alerta y los paneles de la plataforma. Con las copias de seguridad habilitadas, ambas bases de datos archivan continuamente para recuperar un punto en el tiempo. La recuperación y la conmutación por error se prueban con ejercicios automatizados en un clúster en ejecución. La prueba de recuperación solo pasa si los secretos guardados antes de la copia siguen pudiendo descifrarse.
Operaciones y gobernanza.
Notificaciones de alarmas, entregas externas, auditoría, límites por tenant, retención de datos y eliminación de tenants.
Notificaciones
Las políticas de cada tenant envían alarmas por severidad a correo electrónico o webhooks, y escalan las alarmas que nadie reconoce. La escalación puede ejecutarse de forma segura en varias réplicas.
Conectores de salida
Un servicio independiente entrega acciones de reglas a webhooks, MQTT, Kafka, Amazon SNS y Amazon SQS.
Límite de conexiones salientes
Las conexiones salientes bloquean por defecto las direcciones de bucle local, privadas, NAT de operador, locales de enlace y de metadatos de la nube. El operador puede permitir direcciones o rangos de destino específicos para la instancia.
Registro de auditoría
El registro de auditoría recoge los cambios en las entidades del plano de control y quién los hizo. Excluye la telemetría y el estado derivado. Al eliminar un tenant, las entradas se conservan sin nombres ni direcciones de correo.
Gobernanza
Límites por tenant para ingesta, acciones salientes, solicitudes de IA y comandos en cola, que mantienen la carga de cada tenant en una instalación compartida dentro de los valores que configures.
Ciclo de vida de los datos
Hypertables de TimescaleDB con compresión, retención y agregados continuos para resúmenes por minuto.
Eliminación de tenants
Eliminar un tenant revoca el inicio de sesión inmediatamente y rechaza nuevas conexiones, ingesta y comandos en aproximadamente un minuto. Después borra sus datos de la base de datos, el almacén de telemetría, el broker, el almacén de objetos, el almacén clave-valor y el motor de reglas activo, y registra lo que hizo cada componente. Las copias de seguridad caducan por separado: por defecto, los datos principales siguen siendo recuperables durante 30 días y la telemetría durante 7.
Secretos
Los secretos de integración se cifran en reposo, se referencian mediante identificadores y la API solo permite escribirlos.
Personalización de marca
Marca por tenant, con los valores predeterminados del operador como alternativa y después la apariencia integrada.
Simulación de dispositivos
dcctl sim configura un escenario; el simulador, que compilas desde el código fuente, crea sus clientes, áreas, activos y dispositivos, y envía telemetría en tiempo real por el mismo transporte que un dispositivo real.
Agente de borde
Almacena eventos en disco durante una interrupción de red (1 GiB por defecto, descartando los más antiguos cuando se llena) y los reenvía al restablecerse la conexión. Al reproducir el búfer, los eventos JSON se almacenan una vez. Otros formatos de carga pueden almacenarse dos veces.
Pruébalo en un portátil.
La guía del primer dispositivo lleva aproximadamente media hora, incluida la inicialización. Crea una instancia en kind, añade un dispositivo, envía una lectura con curl y mírala en la consola.
DeviceChain aún no ha llegado a 1.0. Es una reescritura de la plataforma IoT SiteWhere. El simulador y el paquete Unity se compilan desde el código fuente; los SDK de cliente se distribuyen por separado. Lee las notas antes de actualizar: algunos cambios anteriores a 1.0 requieren una instalación nueva. Las API y los esquemas de base de datos aún pueden cambiar, y las notas enumeran primero los cambios incompatibles (consulta la estabilidad anterior a 1.0). Si algo falla, envíanos los pasos y el resultado que esperabas. Contacta con nosotros.