Sistema IoT

La plataforma IoT FastBee es una solución IoT rica en funciones, diseñada para pymes y usuarios individuales. Mediante un conjunto de herramientas y funciones fáciles de usar, la plataforma permite a los usuarios gestionar y controlar con eficacia todo tipo de dispositivos inteligentes. A continuación se ofrece una presentación detallada de la plataforma IoT FastBee:
Guía de la página
Comparación de versiones
FastBee ofrece tres versiones: open source, comercial y de clúster. Las diferencias esenciales son las siguientes; la política de licencias completa y la lista de funciones detallada están en Licencia comercial.
| Dimensión | Edición open source | Edición comercial | Edición de clúster |
|---|---|---|---|
| Licencia | AGPL v3, gratuita, limitada a uso no comercial | Licencia comercial perpetua (certificado de instalación) | Licencia comercial perpetua (certificado de instalación) |
| Código fuente y actualizaciones | Código fuente público, actualizaciones en Gitee/GitHub | Tras la autorización, actualizaciones mediante un repositorio Git privado; incluye un año de actualizaciones del código fuente | Igual que la edición comercial |
| Forma de despliegue | Despliegue en un solo comando en una máquina con Docker Compose | Despliegue en una sola máquina (admite instalación rápida con Docker Compose) | Clúster de servicios FMQ + clúster web, con Kafka y equilibrio de carga para alta disponibilidad |
| Protocolos de integración | MQTT, GB/T 28181 (solo transmisión en directo) | Añade protocolos como TCP, UDP, CoAP, HTTP, Modbus y JT808 | Igual que la edición comercial |
| Alcance funcional | Capacidades esenciales como productos/dispositivos/Thing Model, scripts de reglas y gestión de permisos | Añade pantalla grande de visualización, centro de alarmas, multiinquilino, actualización de firmware OTA, puente de datos, gestión de órdenes de trabajo, gestión de tarjetas SIM IoT, etc. (Web SCADA y altavoz inteligente son módulos opcionales) | Mismas funciones que la edición comercial; difiere en el volumen de dispositivos admitido |
| Escenarios de uso | Aprendizaje personal y uso no comercial | Proyectos comerciales de pymes | Proyectos comerciales con gran volumen de dispositivos y requisitos de alta disponibilidad |
1. Presentación de la plataforma
- Contexto del proyecto: el proyecto se llamaba originalmente Wumei Smart (物美智能, wumei-smart) y posteriormente pasó a llamarse Fengxin IoT (蜂信物联, FastBee). Este cambio no solo refleja la renovación de la marca, sino que también marca su desarrollo en el ámbito del IoT y la ampliación de su ámbito de servicios.
- Soporte principal: el backend de la plataforma utiliza el framework Spring Boot y el frontend emplea tecnologías como Vue; estas elecciones tecnológicas garantizan la facilidad de uso de la plataforma y una buena experiencia de usuario.
2. Funciones del sistema
- Gestión de productos: admite funciones como detalles del producto, Thing Model, clasificación y autorización de dispositivos, lo que ayuda a las empresas a organizar y gestionar mejor sus productos inteligentes.
- Gestión de dispositivos: ofrece funciones de gestión como detalles del dispositivo, agrupación, registro de logs y monitorización del estado en tiempo real, garantizando un funcionamiento eficiente y seguro de los dispositivos.
- Gestión del Thing Model: permite definir las propiedades, funciones y eventos de los dispositivos, logrando una interacción eficaz entre el dispositivo y la nube.
- Rule Engine: admite la escritura de reglas basadas en Groovy (con sintaxis igual que Java), de modo que el sistema pueda procesar automáticamente lógicas de negocio complejas.
- Scene Linkage: admite la configuración de escenas de automatización de forma directa o visual, logrando una colaboración fluida entre dispositivos inteligentes.
- Centro de alarmas: puede integrarse con diversos canales de comunicación, como voz, SMS y WeChat Work, para notificar a tiempo anomalías o fallos de los dispositivos y garantizar una respuesta rápida.
- Sistema multiinquilino: admite el aislamiento de datos y la configuración independiente, adecuado para entornos multiinquilino, lo que refuerza la flexibilidad y la seguridad del sistema.
- Integración de videovigilancia: admite dispositivos de vigilancia con el protocolo GB/T28181 y ofrece funciones de transmisión en directo, reproducción de grabaciones y control PTZ, adecuadas para necesidades de vigilancia de seguridad.
- Gestión de escenas: admite la presentación agregada de varios dispositivos y permite ampliar variables de entrada y de cálculo, con soporte para operaciones de datos complejas.
- Puente de datos: actúa como puente con sistemas de datos externos y admite funciones de entrada y salida de datos.
- Centro de datos: admite la generación de informes de datos, la consulta de datos históricos y el análisis de datos de los dispositivos.
- Protocolos de comunicación: admite una amplia variedad de protocolos de comunicación de dispositivos, entre ellos Mqtt, Modbus, Tcp, GB28182, Http y Coap.
- Tarjetas SIM IoT: gestiona las tarjetas SIM conectadas a los dispositivos, admite la integración con plataformas de distintos operadores, permite consultar el estado y el tráfico de las tarjetas y admite alarmas de tráfico.
- Gestión de órdenes de trabajo: admite la gestión automatizada, inteligente y de ciclo completo de tareas como el mantenimiento, la reparación y la inspección de dispositivos o activos.
3. Stack tecnológico
- Tecnologías de backend: incluyen Spring Boot, MyBatis, Spring Security, Jwt, Redis y TDengine, entre otras, lo que garantiza la estabilidad y la eficiencia de los servicios de backend.
- Tecnologías de frontend: utiliza tecnologías modernas de frontend como ES6, ES7, Vue, Vuex, uView y H5, que mejoran la interactividad y la experiencia visual de la interfaz de usuario.
- Compatibilidad móvil: compatible con múltiples plataformas móviles como el mini programa de WeChat, Android e iOS; el desarrollo de aplicaciones multiplataforma se realiza con UniApp, lo que facilita a los usuarios operar y gestionar desde distintos dispositivos.
4. Escenarios de aplicación
FastBee es adecuado para diversos escenarios como el hogar inteligente, la oficina inteligente, la comunidad inteligente, la monitorización agrícola, la monitorización hidrológica y el control industrial. Estos escenarios de aplicación cubren una amplia gama de necesidades, desde el ámbito doméstico hasta el industrial, y muestran el amplio potencial de aplicación de FastBee en el ámbito del IoT.

5. Arquitectura del sistema
┌──────────────────────────────────────────────────────────────────┐
│ Navegador / móvil │
│ Vue2 Web(PC) + Vant(H5 / mini programa) │
└───────────────────────────────┬──────────────────────────────────┘
│ HTTP REST / WebSocket(MQTT)
▼
┌──────────────────────────────────────────────────────────────────┐
│ Nginx(proxy inverso) │
│ / → recursos estáticos del frontend /prod-api/ → backend│
└───────────────────────────────┬──────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Servicio Spring Boot(8080) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ fastbee-open-api(capa Controller) │ │
│ │ device / product / ruleEngine / media / system / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-service(capa Service) │ │
│ │ IotService / SceneService / NotifyService / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-server(integración de protocolos)│ │
│ │ MQTT Broker(1883) / HTTP(8081) / CoAP(5683) / TCP(8888) │ │
│ └────────────────────────────────────────────────────────────┘ │
└───────────┬──────────────────┬────────────────────┬──────────────┘
│ │ │
MySQL Redis TDengine
(metadatos/config.) (caché/valores (datos históricos
en tiempo real) de series temporales)6. Estructura del código
fastbee/
├── vue/ ← Proyecto frontend Vue2
│ ├── src/
│ │ ├── api/ ← Funciones de petición API de cada módulo
│ │ ├── assets/ ← Recursos estáticos (imágenes/iconos/estilos)
│ │ ├── components/ ← Componentes comunes globales (28)
│ │ ├── directive/ ← Directivas personalizadas globales
│ │ ├── lang/ ← Paquetes de idiomas de internacionalización
│ │ ├── layout/ ← Diseño del marco principal
│ │ ├── plugins/ ← Registro de plugins de Vue
│ │ ├── router/ ← Configuración de rutas
│ │ ├── store/ ← Gestión de estado Vuex
│ │ ├── utils/ ← Funciones de utilidad (request/mqttTool, etc.)
│ │ └── views/ ← Vistas de las páginas de negocio
│ ├── package.json
│ └── vue.config.js
│
├── springboot/ ← Proyecto backend multimódulo Spring Boot
│ ├── fastbee-admin/ ← Controladores del lado de administración + configuración
│ ├── fastbee-open-api/ ← Capa de interfaces Open API (Controllers del negocio IoT)
│ ├── fastbee-service/ ← Capa de servicios de negocio (iot-service / system-service)
│ ├── fastbee-server/ ← Servicio de integración de protocolos
│ │ ├── iot-server-core/ ← Lógica central del servicio IoT
│ │ ├── mqtt-broker/ ← MQTT Broker Netty integrado
│ │ ├── http-server/ ← Integración de dispositivos HTTP
│ │ ├── coap-server/ ← Integración de dispositivos CoAP
│ │ ├── sip-server/ ← Integración de vídeo SIP
│ │ └── boot-strap/ ← Punto de entrada de arranque
│ ├── fastbee-protocol/ ← Análisis de protocolos (Modbus/personalizado)
│ ├── fastbee-mq/ ← Integración de cola de mensajes
│ ├── fastbee-notify/ ← Servicio de notificaciones (SMS/correo/WeChat, etc.)
│ ├── fastbee-plugs/ ← Plugins (OSS/OAuth/Quartz/generación de código)
│ ├── fastbee-iot-data/ ← Procesamiento de datos IoT
│ ├── fastbee-record/ ← Servicio de grabación de vídeo
│ ├── fastbee-common-extend/ ← Extensión de utilidades comunes
│ └── sql/ ← Scripts de inicialización/actualización de la base de datos
│
├── docker/ ← Archivos de despliegue Docker Compose
└── sdk/ ← SDK del lado del dispositivo7. Descripción de los módulos funcionales
Gestión de dispositivos
| Función | Descripción |
|---|---|
| Registro/importación de dispositivos | Alta manual o importación masiva de dispositivos desde Excel |
| Asignación/recuperación de dispositivos | Asignación de dispositivos por organización/usuario, con posibilidad de recuperación |
| Actualización del estado en tiempo real | Actualización del estado en línea/desconectado en tiempo real mediante la suscripción MQTT a /+/{sn}/status/post |
| Código QR del dispositivo | Generación de códigos QR de vinculación, con posibilidad de impresión |
| Actualización de firmware OTA | Gestión de versiones + envío de tareas de actualización |
| Envío de comandos | Envío de propiedades del Thing Model / llamadas a funciones |
| Modo sombra | Cuando el dispositivo está desconectado, la sombra almacena en caché el valor más reciente |
Ruta de la página: /iot/device/list → views/iot/device/index.vue
Gestión de productos
| Función | Descripción |
|---|---|
| Plantilla de producto | Define el tipo de dispositivo y el Thing Model |
| Thing Model | Tres elementos: propiedades (Property) / funciones (Function) / eventos (Event) |
| Configuración de protocolos | MQTT / HTTP / CoAP / TCP / Modbus / JT808 |
| Publicación del producto | Tras la publicación, los dispositivos ya no pueden modificar el Thing Model |
| Editor de arrastrar y soltar | Configuración visual del panel de estado de funcionamiento del dispositivo |
Rule Engine
| Función | Descripción |
|---|---|
| Scene Linkage | Orquestación visual de «disparador → condición → acción» (impulsada por LiteFlow) |
| Alarmas de dispositivos | Activación por umbral/rango/valor booleano, con tiempo de silencio |
| Scripts de reglas | Scripts Groovy/JavaScript para procesar datos originales |
| Activación con un clic | Activación manual de Scene Linkage |
Centro de datos
| Función | Descripción |
|---|---|
| Datos en tiempo real | Valores más recientes del Thing Model reportados por el dispositivo (caché Redis) |
| Datos históricos | Consulta por intervalos de tiempo (base de datos de series temporales TDengine) |
| Informes de datos | Generación programada de Excel, con notificación por correo electrónico |
| Exportación de datos | Descarga de datos históricos |
Videovigilancia
| Función | Descripción |
|---|---|
| Integración de dispositivos | Compatible con el protocolo GB28181 (SIP) |
| Reproducción en tiempo real | RTMP / RTSP / FLV / HLS / WebRTC |
| Reproducción de grabaciones | Consulta de grabaciones históricas por intervalos de tiempo (ZLMediaKit) |
| Control PTZ | Envío de comandos PTZ |
| Intercomunicación de voz | Modo activo SIP TCP |
Servicio de notificaciones
Canales compatibles: SMS (Alibaba Cloud/Tencent), correo electrónico, cuenta oficial de WeChat, WeChat Work, DingTalk, push HTTP y push MQTT.
Gestión del sistema
Usuarios/roles/organizaciones (multiinquilino)/menús/diccionarios/logs/monitorización del sistema/generación de código.
8. Documentación de la API
La documentación completa de las interfaces está disponible mediante Swagger:
http://localhost:8080/swagger-ui/index.html(entorno de desarrollo)
Todas las interfaces utilizan un formato de respuesta unificado:
{
"code": 200,
"msg": "Operación correcta",
"data": { ... }
}Formato de respuesta de listas paginadas:
{
"code": 200,
"msg": "Operación correcta",
"rows": [ ... ],
"total": 100
}Interfaces de autenticación
| Método | Ruta | Descripción |
|---|---|---|
| POST | /login | Inicio de sesión con cuenta y contraseña |
| POST | /register | Registro de usuario |
| POST | /logout | Cierre de sesión |
| GET | /getInfo | Obtener la información del usuario actual |
| GET | /captchaImage | Obtener el captcha gráfico |
| POST | /auth/sms/login | Inicio de sesión con código SMS |
| GET | /auth/login/{loginId} | Inicio de sesión social de terceros |
| POST | /auth/ssoLogin | Inicio de sesión único SSO |
Ejemplo de inicio de sesión:
POST /login
Content-Type: application/json
{
"username": "admin",
"password": "admin123",
"code": "1234",
"uuid": "xxx-xxx-xxx",
"sourceType": 1
}{
"code": 200,
"msg": "Operación correcta",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs..."
}
}Las solicitudes posteriores deben incluir el encabezado: Authorization: Bearer {token}
Interfaces de dispositivos (/iot/device)
| Método | Ruta | Permiso | Descripción |
|---|---|---|---|
| GET | /iot/device/list | iot:device:list | Lista paginada de dispositivos |
| GET | /iot/device/shortList | iot:device:list | Lista breve de dispositivos (página de inicio) |
| GET | /iot/device/all | iot:device:list | Lista breve de todos los dispositivos |
| GET | /iot/device/{deviceId} | iot:device:query | Detalles del dispositivo |
| GET | /iot/device/getDeviceBySerialNumber/{sn} | iot:device:query | Consulta por número de serie |
| POST | /iot/device | iot:device:add | Añadir dispositivo |
| PUT | /iot/device | iot:device:edit | Modificar dispositivo |
| DELETE | /iot/device/{deviceId} | iot:device:remove | Eliminar dispositivo |
| POST | /iot/device/export | iot:device:export | Exportar a Excel |
| POST | /iot/device/assignment | iot:device:assignment | Asignar dispositivo a una organización |
| POST | /iot/device/user/assignment | iot:device:assignment | Asignar dispositivo a un usuario |
| POST | /iot/device/recovery | iot:device:recovery | Recuperar dispositivo |
| GET | /iot/device/runningStatus | iot:device:query | Estado de funcionamiento |
| GET | /iot/device/thingsModelValue/{deviceId} | iot:device:query | Valores en tiempo real del Thing Model |
| GET | /iot/device/statistic | - | Estadísticas de datos de monitorización |
Interfaces de productos (/iot/product)
| Método | Ruta | Descripción |
|---|---|---|
| GET | /iot/product/list | Lista paginada de productos |
| GET | /iot/product/shortList | Lista breve de productos |
| GET | /iot/product/{productId} | Detalles del producto |
| POST | /iot/product | Añadir producto |
| PUT | /iot/product | Modificar producto |
| DELETE | /iot/product/{productId} | Eliminar producto |
| PUT | /iot/product/status | Publicar/retirar producto |
| POST | /iot/product/copy?productId= | Copiar producto |
Interfaces del Thing Model (/iot/thingsModel)
| Método | Ruta | Descripción |
|---|---|---|
| GET | /iot/thingsModel/list | Lista de Thing Models |
| POST | /iot/thingsModel | Añadir Thing Model |
| PUT | /iot/thingsModel | Modificar Thing Model |
| DELETE | /iot/thingsModel/{modelId} | Eliminar Thing Model |
| POST | /iot/thingsModel/sync | Sincronizar con el dispositivo |
Interfaces del Rule Engine (/iot/scene)
| Método | Ruta | Descripción |
|---|---|---|
| GET | /iot/scene/list | Lista de Scene Linkage |
| POST | /iot/scene | Añadir escena |
| PUT | /iot/scene | Modificar escena |
| DELETE | /iot/scene/{sceneId} | Eliminar escena |
| POST | /iot/scene/trigger/{sceneId} | Activación manual |
Interfaces del centro de datos (/iot/datacenter)
| Método | Ruta | Descripción |
|---|---|---|
| GET | /iot/datacenter/latestData | Datos más recientes |
| GET | /iot/datacenter/historyData | Datos históricos |
9. Normas de desarrollo
Normas de nomenclatura del frontend
| Tipo | Norma | Ejemplo |
|---|---|---|
| Archivos/directorios | kebab-case | device-edit.vue |
| Nombres de componentes | PascalCase | DeviceCard |
| Variables/métodos | camelCase | deviceList, handleQuery() |
| Constantes | UPPER_CASE | MAX_PAGE_SIZE |
| Archivos de API | camelCase | device.js, product.js |
| Clases CSS | kebab-case | .device-item |
Normas de nomenclatura del backend
| Tipo | Norma | Ejemplo |
|---|---|---|
| Nombres de paquetes | Todo en minúsculas, separado por puntos | com.fastbee.iot.service |
| Nombres de clases | PascalCase | DeviceServiceImpl |
| Nombres de interfaces | I + PascalCase | IDeviceService |
| Nombres de métodos | camelCase | listDeviceByGroup() |
| Constantes | UPPER_SNAKE | MAX_RETRY_COUNT |
| Tablas de base de datos | Minúsculas con guiones bajos | iot_device |
| Campos de base de datos | Minúsculas con guiones bajos | serial_number |
Normas de diseño de la API
- Estilo RESTful, con nombres de recursos en plural
- Prefijos de ruta unificados:
/iot/(módulo IoT),/system/(módulo del sistema) - Los Controllers heredan de
BaseControllery utilizan@PreAuthorizepara la validación de permisos - Se utiliza la anotación
@Logpara registrar los logs de operaciones - Las respuestas unificadas utilizan
AjaxResult.success()/getDataTable()
@PreAuthorize("@ss.hasPermi('iot:device:add')")
@Log(title = "Dispositivo", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("Añadir dispositivo")
public AjaxResult add(@Validated @RequestBody Device device) {
return toAjax(deviceService.insertDevice(device));
}10. Preguntas frecuentes
Frontend
Q: ¿Error relacionado con patch-package al arrancar después de npm install?
Causa: node_modules no se instaló por completo o hay un problema de caché.
# Limpiar la caché y reinstalar
rm -rf node_modules package-lock.json
npm cache clean --force
npm installQ: ¿Las interfaces devuelven 404 en el entorno de desarrollo?
Compruebe que VUE_APP_SERVER_API_URL en .env.development apunte correctamente al backend y confirme que el backend esté iniciado.
Q: ¿Los cuadros de diálogo (MessageBox) de Element UI no se abren?
Confirme que el componente esté registrado globalmente; en el proyecto se registra en main.js mediante Vue.use(Element), sin necesidad de importarlo por separado.
Q: ¿Fallo en la conexión MQTT?
- Confirme que la configuración de
VUE_APP_MQTT_SERVER_URLsea correcta (en el entorno de desarrollo,ws://localhost:8083/mqtt) - Confirme que el Broker integrado esté iniciado (
server.broker.enabled: true+server.broker.websocket-port: 8083) - Compruebe si el Token es válido (mqttTool utiliza el Token como contraseña MQTT)
Q: ¿Conflictos de versión con vue-treeselect?
El proyecto utiliza de forma unificada @riophae/vue-treeselect@0.4.0; no lo mezcle con otras versiones.
Q: ¿Error al importar el componente vue-qr?
// ✅ Forma correcta (importación por defecto)
import vueQr from 'vue-qr';
// ❌ Forma incorrecta (la importación con nombre falla)
import { VueQr } from 'vue-qr';Backend
Q: ¿Errores relacionados con license al arrancar?
Configure la ruta correcta del certificado en application-dev.yml:
license:
subject: common
licensePath: classpath:license.licSolicite el archivo de certificado (license.lic) al equipo oficial y colóquelo en el directorio resources.
Q: ¿TDengine notifica un tiempo de espera de conexión?
- Confirme que TDengine esté iniciado (puerto predeterminado 6041)
- Compruebe la configuración de la fuente de datos
taosenapplication-dev.yml - Si no necesita la base de datos de series temporales, puede omitirla con
taos.enabled: false
Q: ¿El Rule Engine no se activa?
- Confirme que el estado de Scene Linkage sea «habilitado»
- Compruebe las condiciones del disparador (rangos numéricos, símbolos de comparación)
- Revise la cadena de ejecución de LiteFlow en los logs
Q: ¿El dispositivo está en línea pero el backend no muestra el estado en línea?
- Compruebe la autenticación MQTT (configuración del Webhook de EMQX)
- Confirme que el
serialNumberdel dispositivo coincida con el registrado en el sistema - Compruebe si los logs del backend contienen registros de procesamiento del estado del dispositivo
Q: ¿Cómo alternar entre EMQX y el Broker integrado?
# application.yml
server:
broker:
enabled: true # true = Broker Netty integrado
# false = usar EMQX externo (requiere configurar spring.mqtt.host-url)Q: ¿Cómo se implementa el aislamiento de datos multiinquilino?
La plataforma aísla los datos mediante el campo tenant_id (ID de organización). La capa Controller obtiene la información de la organización del usuario que ha iniciado sesión desde SecurityUtils.getLoginUser(), y la capa Service filtra automáticamente al consultar.
Q: ¿Cómo acceder a la página de monitorización de Druid?
Acceda desde el navegador a http://localhost:8080/druid/index.html; la cuenta y la contraseña predeterminadas son fastbee (pueden modificarse en application.yml).


