Skip to content

Sistema IoT ​

Diagrama de panorama general del sistema IoT FastBee

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 ​

Contenido de la páginaPresentación general de la plataforma IoT FastBee: contexto del proyecto, funciones del sistema, stack tecnológico, escenarios de aplicación y arquitectura del sistema.
Escenarios de usoAdecuada para lectores que conocen por primera vez las capacidades y la arquitectura de la plataforma de la edición comercial, para formarse una visión general del producto.
Requisitos previosNinguno; después puede seguir la ruta recomendada y continuar con los capítulos de diseño de la arquitectura e instalación y despliegue.

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ónEdición open sourceEdición comercialEdición de clúster
LicenciaAGPL v3, gratuita, limitada a uso no comercialLicencia comercial perpetua (certificado de instalación)Licencia comercial perpetua (certificado de instalación)
Código fuente y actualizacionesCódigo fuente público, actualizaciones en Gitee/GitHubTras la autorización, actualizaciones mediante un repositorio Git privado; incluye un año de actualizaciones del código fuenteIgual que la edición comercial
Forma de despliegueDespliegue en un solo comando en una máquina con Docker ComposeDespliegue 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ónMQTT, GB/T 28181 (solo transmisión en directo)Añade protocolos como TCP, UDP, CoAP, HTTP, Modbus y JT808Igual que la edición comercial
Alcance funcionalCapacidades esenciales como productos/dispositivos/Thing Model, scripts de reglas y gestión de permisosAñ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 usoAprendizaje personal y uso no comercialProyectos comerciales de pymesProyectos 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.

Diagrama de escenarios de aplicación de FastBee

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 dispositivo

7. Descripción de los módulos funcionales ​

Gestión de dispositivos ​

FunciónDescripción
Registro/importación de dispositivosAlta manual o importación masiva de dispositivos desde Excel
Asignación/recuperación de dispositivosAsignación de dispositivos por organización/usuario, con posibilidad de recuperación
Actualización del estado en tiempo realActualización del estado en línea/desconectado en tiempo real mediante la suscripción MQTT a /+/{sn}/status/post
Código QR del dispositivoGeneración de códigos QR de vinculación, con posibilidad de impresión
Actualización de firmware OTAGestión de versiones + envío de tareas de actualización
Envío de comandosEnvío de propiedades del Thing Model / llamadas a funciones
Modo sombraCuando 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ónDescripción
Plantilla de productoDefine el tipo de dispositivo y el Thing Model
Thing ModelTres elementos: propiedades (Property) / funciones (Function) / eventos (Event)
Configuración de protocolosMQTT / HTTP / CoAP / TCP / Modbus / JT808
Publicación del productoTras la publicación, los dispositivos ya no pueden modificar el Thing Model
Editor de arrastrar y soltarConfiguración visual del panel de estado de funcionamiento del dispositivo

Rule Engine ​

FunciónDescripción
Scene LinkageOrquestación visual de «disparador → condición → acción» (impulsada por LiteFlow)
Alarmas de dispositivosActivación por umbral/rango/valor booleano, con tiempo de silencio
Scripts de reglasScripts Groovy/JavaScript para procesar datos originales
Activación con un clicActivación manual de Scene Linkage

Centro de datos ​

FunciónDescripción
Datos en tiempo realValores más recientes del Thing Model reportados por el dispositivo (caché Redis)
Datos históricosConsulta por intervalos de tiempo (base de datos de series temporales TDengine)
Informes de datosGeneración programada de Excel, con notificación por correo electrónico
Exportación de datosDescarga de datos históricos

Videovigilancia ​

FunciónDescripción
Integración de dispositivosCompatible con el protocolo GB28181 (SIP)
Reproducción en tiempo realRTMP / RTSP / FLV / HLS / WebRTC
Reproducción de grabacionesConsulta de grabaciones históricas por intervalos de tiempo (ZLMediaKit)
Control PTZEnvío de comandos PTZ
Intercomunicación de vozModo 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:

json
{
  "code": 200,
  "msg": "Operación correcta",
  "data": { ... }
}

Formato de respuesta de listas paginadas:

json
{
  "code": 200,
  "msg": "Operación correcta",
  "rows": [ ... ],
  "total": 100
}

Interfaces de autenticación ​

MétodoRutaDescripción
POST/loginInicio de sesión con cuenta y contraseña
POST/registerRegistro de usuario
POST/logoutCierre de sesión
GET/getInfoObtener la información del usuario actual
GET/captchaImageObtener el captcha gráfico
POST/auth/sms/loginInicio de sesión con código SMS
GET/auth/login/{loginId}Inicio de sesión social de terceros
POST/auth/ssoLoginInicio de sesión único SSO

Ejemplo de inicio de sesión:

bash
POST /login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123",
  "code": "1234",
  "uuid": "xxx-xxx-xxx",
  "sourceType": 1
}
json
{
  "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étodoRutaPermisoDescripción
GET/iot/device/listiot:device:listLista paginada de dispositivos
GET/iot/device/shortListiot:device:listLista breve de dispositivos (página de inicio)
GET/iot/device/alliot:device:listLista breve de todos los dispositivos
GET/iot/device/{deviceId}iot:device:queryDetalles del dispositivo
GET/iot/device/getDeviceBySerialNumber/{sn}iot:device:queryConsulta por número de serie
POST/iot/deviceiot:device:addAñadir dispositivo
PUT/iot/deviceiot:device:editModificar dispositivo
DELETE/iot/device/{deviceId}iot:device:removeEliminar dispositivo
POST/iot/device/exportiot:device:exportExportar a Excel
POST/iot/device/assignmentiot:device:assignmentAsignar dispositivo a una organización
POST/iot/device/user/assignmentiot:device:assignmentAsignar dispositivo a un usuario
POST/iot/device/recoveryiot:device:recoveryRecuperar dispositivo
GET/iot/device/runningStatusiot:device:queryEstado de funcionamiento
GET/iot/device/thingsModelValue/{deviceId}iot:device:queryValores en tiempo real del Thing Model
GET/iot/device/statistic-Estadísticas de datos de monitorización

Interfaces de productos (/iot/product) ​

MétodoRutaDescripción
GET/iot/product/listLista paginada de productos
GET/iot/product/shortListLista breve de productos
GET/iot/product/{productId}Detalles del producto
POST/iot/productAñadir producto
PUT/iot/productModificar producto
DELETE/iot/product/{productId}Eliminar producto
PUT/iot/product/statusPublicar/retirar producto
POST/iot/product/copy?productId=Copiar producto

Interfaces del Thing Model (/iot/thingsModel) ​

MétodoRutaDescripción
GET/iot/thingsModel/listLista de Thing Models
POST/iot/thingsModelAñadir Thing Model
PUT/iot/thingsModelModificar Thing Model
DELETE/iot/thingsModel/{modelId}Eliminar Thing Model
POST/iot/thingsModel/syncSincronizar con el dispositivo

Interfaces del Rule Engine (/iot/scene) ​

MétodoRutaDescripción
GET/iot/scene/listLista de Scene Linkage
POST/iot/sceneAñadir escena
PUT/iot/sceneModificar escena
DELETE/iot/scene/{sceneId}Eliminar escena
POST/iot/scene/trigger/{sceneId}Activación manual

Interfaces del centro de datos (/iot/datacenter) ​

MétodoRutaDescripción
GET/iot/datacenter/latestDataDatos más recientes
GET/iot/datacenter/historyDataDatos históricos

9. Normas de desarrollo ​

Normas de nomenclatura del frontend ​

TipoNormaEjemplo
Archivos/directorioskebab-casedevice-edit.vue
Nombres de componentesPascalCaseDeviceCard
Variables/métodoscamelCasedeviceList, handleQuery()
ConstantesUPPER_CASEMAX_PAGE_SIZE
Archivos de APIcamelCasedevice.js, product.js
Clases CSSkebab-case.device-item

Normas de nomenclatura del backend ​

TipoNormaEjemplo
Nombres de paquetesTodo en minúsculas, separado por puntoscom.fastbee.iot.service
Nombres de clasesPascalCaseDeviceServiceImpl
Nombres de interfacesI + PascalCaseIDeviceService
Nombres de métodoscamelCaselistDeviceByGroup()
ConstantesUPPER_SNAKEMAX_RETRY_COUNT
Tablas de base de datosMinúsculas con guiones bajosiot_device
Campos de base de datosMinúsculas con guiones bajosserial_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 BaseController y utilizan @PreAuthorize para la validación de permisos
  • Se utiliza la anotación @Log para registrar los logs de operaciones
  • Las respuestas unificadas utilizan AjaxResult.success() / getDataTable()
java
@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é.

bash
# Limpiar la caché y reinstalar
rm -rf node_modules package-lock.json
npm cache clean --force
npm install

Q: ¿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?

  1. Confirme que la configuración de VUE_APP_MQTT_SERVER_URL sea correcta (en el entorno de desarrollo, ws://localhost:8083/mqtt)
  2. Confirme que el Broker integrado esté iniciado (server.broker.enabled: true + server.broker.websocket-port: 8083)
  3. 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?

javascript
// ✅ 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:

yaml
license:
  subject: common
  licensePath: classpath:license.lic

Solicite 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?

  1. Confirme que TDengine esté iniciado (puerto predeterminado 6041)
  2. Compruebe la configuración de la fuente de datos taos en application-dev.yml
  3. Si no necesita la base de datos de series temporales, puede omitirla con taos.enabled: false

Q: ¿El Rule Engine no se activa?

  1. Confirme que el estado de Scene Linkage sea «habilitado»
  2. Compruebe las condiciones del disparador (rangos numéricos, símbolos de comparación)
  3. 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?

  1. Compruebe la autenticación MQTT (configuración del Webhook de EMQX)
  2. Confirme que el serialNumber del dispositivo coincida con el registrado en el sistema
  3. Compruebe si los logs del backend contienen registros de procesamiento del estado del dispositivo

Q: ¿Cómo alternar entre EMQX y el Broker integrado?

yaml
# 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).