DeviceChain
Español
Descargar
Código abierto, Apache-2.0, anterior a 1.0

Conecta, detecta y envía comandos.

Conecta dispositivos, almacena su telemetría, ejecuta reglas y envía comandos en tu propio clúster de Kubernetes. Una instalación atiende a varios tenants. DeviceChain tiene una sola edición. Su código se distribuye con la licencia Apache-2.0.

Una ejecución grabada

Míralo en funcionamiento.

Renderizado a partir de la grabación de una ejecución real: 19 máquinas de cantera simuladas, cada una conectada a DeviceChain como un dispositivo independiente. Los valores de las tarjetas se consultaron en la plataforma. Una regla del perfil del dispositivo activa la alarma de combustible bajo y envía el comando de repostaje; el camión informa de que lo ha completado.

Abre el panel de la cantera y reproduce una ejecución grabada.

Cómo funciona

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.

Modelo de dispositivos

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.
Reglas

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.
Creación de reglas

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

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.

Reproduce una ejecución grabada de este panel.

Capturado en el visor independiente de paneles durante una ejecución real: 19 máquinas de cantera simuladas envían telemetría a DeviceChain, cada una como un dispositivo independiente. Las alarmas del panel las activaron reglas del perfil del dispositivo.
Tus datos

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.
Interfaces

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.
Despliégalo tú mismo

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.

También incluye

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.