物联网系统

FastBee物联网平台是一个功能丰富的物联网解决方案,专为中小企业和个人用户设计。该平台通过提供一系列易于使用的工具和功能,使用户能够有效地管理和控制各种智能设备。以下是对FastBee物联网平台的详细介绍:
一、平台简介
- 项目背景:原名为物美智能(wumei-smart),后更名为蜂信物联(FastBee)。这一变更不仅反映了品牌的更新,也标志着其在物联网领域的发展和服务范围的扩展。
- 主要支持:平台后端采用Spring Boot框架,前端使用Vue技术等,这些技术的选择确保了平台的易用性和良好的用户体验。
二、系统功能
- 产品管理:支持产品详情、物模型、分类及设备授权等功能,有助于企业更好地组织和管理其智能产品。
- 设备管理:提供设备详情、分组、日志记录、实时状态监控等管理功能,确保设备运行的高效与安全。
- 物模型管理:允许定义设备的属性、功能和事件,实现设备与云端的有效交互。
- 规则引擎:支持基于groovy(语法同java)的规则编写,使得系统能够自动处理复杂的业务逻辑。
- 场景联动:支持直接或可视化配置自动化场景,实现智能设备之间的无缝协作。
- 告警中心:能够对接多种通讯方式如语音、短信和企业微信,及时通知设备异常或故障,保证快速响应。
- 多租户系统:支持数据隔离和独立配置,适合多租户环境,增强系统的灵活性和安全性。
- 视频监控接入:支持GB/T28181协议的监控设备,提供直播、录制回放及云台控制功能,适用于安防监控需求。
- 场景管理:支持聚合多个设备展示,同时可扩展录入、运算型变量,支持复杂的数据运算。
- 数据桥接:作为与外部数据系统的桥梁,支持数据的输入输出等功能。
- 数据中心:支持生成数据报表,查看历史数据,对设备进行数据分析。
- 通讯协议:支持丰富的设备通讯协议,包括:Mqtt、Modbus、Tcp、GB28182、Http、Coap等。
- 物联网卡:管理设备连接的SIM卡,支持对接不同经销商平台,可查看卡状态、流量,支持流量告警。
- 工单管理:支持对设备或资产的维护、维修、检查等任务进行自动化、智能化和全流程化管理。
三、技术栈
- 后端技术:包括Spring Boot, MyBatis, Spring Security, Jwt, Redis, TDengine等,确保了后端服务的稳定性和高效性。
- 前端技术:使用ES6, ES7, Vue, Vuex, uView, H5等现代前端技术,提升了用户界面的交互性和视觉体验。
- 移动端支持:支持微信小程序、安卓和苹果等多种移动平台,通过Uniapp实现跨平台应用开发,方便用户在不同设备上进行操作和管理。
四、应用场景
FastBee适用于智能家居、智慧办公、智慧社区、农业监测、水利监测以及工业控制等多种场景。这些应用场景覆盖了从家庭到工业级别的广泛需求,展示了FastBee在物联网领域的广泛应用潜力。

五、系统架构
┌──────────────────────────────────────────────────────────────────┐
│ 浏览器/移动端 │
│ Vue2 Web(PC) + Vant(H5 / 小程序) │
└───────────────────────────────┬──────────────────────────────────┘
│ HTTP REST / WebSocket(MQTT)
▼
┌──────────────────────────────────────────────────────────────────┐
│ Nginx(反向代理) │
│ / → 静态前端资源 /prod-api/ → 后端 │
└───────────────────────────────┬──────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Spring Boot 服务(8080) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ fastbee-open-api(Controller 层) │ │
│ │ device / product / ruleEngine / media / system / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-service(Service 层) │ │
│ │ IotService / SceneService / NotifyService / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-server(协议接入) │ │
│ │ MQTT Broker(1883) / HTTP(8081) / CoAP(5683) / TCP(8888) │ │
│ └────────────────────────────────────────────────────────────┘ │
└───────────┬──────────────────┬────────────────────┬──────────────┘
│ │ │
MySQL Redis TDengine
(元数据/配置) (缓存/实时值) (时序历史数据)六、代码结构
fastbee/
├── vue/ ← 前端 Vue2 项目
│ ├── src/
│ │ ├── api/ ← 各模块 API 请求函数
│ │ ├── assets/ ← 静态资源(图片/图标/样式)
│ │ ├── components/ ← 全局公共组件(28 个)
│ │ ├── directive/ ← 全局自定义指令
│ │ ├── lang/ ← 国际化语言包
│ │ ├── layout/ ← 主框架布局
│ │ ├── plugins/ ← Vue 插件注册
│ │ ├── router/ ← 路由配置
│ │ ├── store/ ← Vuex 状态管理
│ │ ├── utils/ ← 工具函数(request/mqttTool 等)
│ │ └── views/ ← 业务页面视图
│ ├── package.json
│ └── vue.config.js
│
├── springboot/ ← 后端 Spring Boot 多模块项目
│ ├── fastbee-admin/ ← 管理端控制器 + 配置
│ ├── fastbee-open-api/ ← Open API 接口层(IoT 业务 Controller)
│ ├── fastbee-service/ ← 业务服务层(iot-service / system-service)
│ ├── fastbee-server/ ← 协议接入服务
│ │ ├── iot-server-core/ ← IoT 核心服务逻辑
│ │ ├── mqtt-broker/ ← 内置 Netty MQTT Broker
│ │ ├── http-server/ ← HTTP 设备接入
│ │ ├── coap-server/ ← CoAP 设备接入
│ │ ├── sip-server/ ← SIP 视频接入
│ │ └── boot-strap/ ← 启动入口
│ ├── fastbee-protocol/ ← 协议解析(Modbus/自定义)
│ ├── fastbee-mq/ ← 消息队列集成
│ ├── fastbee-notify/ ← 通知服务(短信/邮件/微信等)
│ ├── fastbee-plugs/ ← 插件(OSS/OAuth/Quartz/代码生成)
│ ├── fastbee-iot-data/ ← IoT 数据处理
│ ├── fastbee-record/ ← 录像服务
│ ├── fastbee-common-extend/ ← 公共工具扩展
│ └── sql/ ← 数据库初始化/升级脚本
│
├── docker/ ← Docker Compose 部署文件
└── sdk/ ← 设备端 SDK七、功能模块说明
设备管理
| 功能 | 说明 |
|---|---|
| 设备注册/导入 | 手动新增或批量 Excel 导入设备 |
| 设备分配/回收 | 按机构/用户维度分配设备,支持回收 |
| 状态实时刷新 | 通过 MQTT 订阅 /+/{sn}/status/post 实时更新在线/离线状态 |
| 设备二维码 | 生成绑定二维码,支持打印 |
| OTA 固件升级 | 版本管理 + 升级任务下发 |
| 指令下发 | 物模型属性下发 / 功能调用 |
| 影子模式 | 设备离线时通过影子缓存最新值 |
页面路由:/iot/device/list → views/iot/device/index.vue
产品管理
| 功能 | 说明 |
|---|---|
| 产品模板 | 定义设备类型及物模型 |
| 物模型 | 属性(Property)/ 功能(Function)/ 事件(Event)三元素 |
| 协议配置 | MQTT / HTTP / CoAP / TCP / Modbus / JT808 |
| 产品发布 | 发布后设备不可再修改物模型 |
| 拖拽编辑器 | 可视化配置设备运行状态面板 |
规则引擎
| 功能 | 说明 |
|---|---|
| 场景联动 | 触发器 → 条件 → 动作 可视化编排(LiteFlow 驱动) |
| 设备告警 | 基于阈值/范围/布尔触发,支持静默时间 |
| 规则脚本 | Groovy/JavaScript 脚本处理原始数据 |
| 一键触发 | 手动触发场景联动 |
数据中心
| 功能 | 说明 |
|---|---|
| 实时数据 | 设备最新上报的物模型值(Redis 缓存) |
| 历史数据 | 按时间段查询(TDengine 时序数据库) |
| 数据报表 | 定时生成 Excel,支持邮件通知 |
| 数据导出 | 历史数据下载 |
视频监控
| 功能 | 说明 |
|---|---|
| 设备接入 | 支持 GB28181(SIP)协议 |
| 实时播放 | RTMP / RTSP / FLV / HLS / WebRTC |
| 录像回放 | 按时间段查询历史录像(ZLMediaKit) |
| 云台控制 | PTZ 指令下发 |
| 语音对讲 | SIP TCP 主动方式 |
通知服务
支持渠道:短信(阿里云/腾讯)、邮件、微信公众号、企业微信、钉钉、HTTP 推送、MQTT 推送。
系统管理
用户/角色/机构(多租户)/ 菜单/字典/日志/系统监控/代码生成。
八. API 接口文档
完整接口文档可通过 Swagger 访问:
http://localhost:8080/swagger-ui/index.html(开发环境)
所有接口统一响应格式:
{
"code": 200,
"msg": "操作成功",
"data": { ... }
}分页列表响应格式:
{
"code": 200,
"msg": "操作成功",
"rows": [ ... ],
"total": 100
}认证接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /login | 账号密码登录 |
| POST | /register | 用户注册 |
| POST | /logout | 退出登录 |
| GET | /getInfo | 获取当前用户信息 |
| GET | /captchaImage | 获取图形验证码 |
| POST | /auth/sms/login | 短信验证码登录 |
| GET | /auth/login/{loginId} | 第三方社交登录 |
| POST | /auth/ssoLogin | SSO 单点登录 |
登录示例:
POST /login
Content-Type: application/json
{
"username": "admin",
"password": "admin123",
"code": "1234",
"uuid": "xxx-xxx-xxx",
"sourceType": 1
}{
"code": 200,
"msg": "操作成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs..."
}
}后续请求需携带头:Authorization: Bearer {token}
设备接口(/iot/device)
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| GET | /iot/device/list | iot:device:list | 设备分页列表 |
| GET | /iot/device/shortList | iot:device:list | 设备简短列表(首页) |
| GET | /iot/device/all | iot:device:list | 所有设备简短列表 |
| GET | /iot/device/{deviceId} | iot:device:query | 设备详情 |
| GET | /iot/device/getDeviceBySerialNumber/{sn} | iot:device:query | 按序列号查询 |
| POST | /iot/device | iot:device:add | 新增设备 |
| PUT | /iot/device | iot:device:edit | 修改设备 |
| DELETE | /iot/device/{deviceId} | iot:device:remove | 删除设备 |
| POST | /iot/device/export | iot:device:export | 导出 Excel |
| POST | /iot/device/assignment | iot:device:assignment | 分配设备给机构 |
| POST | /iot/device/user/assignment | iot:device:assignment | 分配设备给用户 |
| POST | /iot/device/recovery | iot:device:recovery | 回收设备 |
| GET | /iot/device/runningStatus | iot:device:query | 运行状态 |
| GET | /iot/device/thingsModelValue/{deviceId} | iot:device:query | 物模型实时值 |
| GET | /iot/device/statistic | - | 监测数据统计 |
产品接口(/iot/product)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /iot/product/list | 产品分页列表 |
| GET | /iot/product/shortList | 产品简短列表 |
| GET | /iot/product/{productId} | 产品详情 |
| POST | /iot/product | 新增产品 |
| PUT | /iot/product | 修改产品 |
| DELETE | /iot/product/{productId} | 删除产品 |
| PUT | /iot/product/status | 发布/下架产品 |
| POST | /iot/product/copy?productId= | 复制产品 |
物模型接口(/iot/thingsModel)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /iot/thingsModel/list | 物模型列表 |
| POST | /iot/thingsModel | 新增物模型 |
| PUT | /iot/thingsModel | 修改物模型 |
| DELETE | /iot/thingsModel/{modelId} | 删除物模型 |
| POST | /iot/thingsModel/sync | 同步到设备 |
规则引擎接口(/iot/scene)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /iot/scene/list | 场景联动列表 |
| POST | /iot/scene | 新增场景 |
| PUT | /iot/scene | 修改场景 |
| DELETE | /iot/scene/{sceneId} | 删除场景 |
| POST | /iot/scene/trigger/{sceneId} | 手动触发 |
数据中心接口(/iot/datacenter)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /iot/datacenter/latestData | 最新数据 |
| GET | /iot/datacenter/historyData | 历史数据 |
九、开发规范
前端命名规范
| 类型 | 规范 | 示例 |
|---|---|---|
| 文件/目录 | kebab-case | device-edit.vue |
| 组件名 | PascalCase | DeviceCard |
| 变量/方法 | camelCase | deviceList, handleQuery() |
| 常量 | UPPER_CASE | MAX_PAGE_SIZE |
| API 文件 | camelCase | device.js, product.js |
| CSS 类名 | kebab-case | .device-item |
后端命名规范
| 类型 | 规范 | 示例 |
|---|---|---|
| 包名 | 全小写,点分隔 | com.fastbee.iot.service |
| 类名 | PascalCase | DeviceServiceImpl |
| 接口名 | I + PascalCase | IDeviceService |
| 方法名 | camelCase | listDeviceByGroup() |
| 常量 | UPPER_SNAKE | MAX_RETRY_COUNT |
| 数据库表 | 小写下划线 | iot_device |
| 数据库字段 | 小写下划线 | serial_number |
API 设计规范
- RESTful 风格,资源名使用名词复数
- 路由前缀统一:
/iot/(IoT 模块)、/system/(系统模块) - Controller 继承
BaseController,使用@PreAuthorize做权限校验 - 使用
@Log注解记录操作日志 - 返回统一用
AjaxResult.success()/getDataTable()
@PreAuthorize("@ss.hasPermi('iot:device:add')")
@Log(title = "设备", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增设备")
public AjaxResult add(@Validated @RequestBody Device device) {
return toAjax(deviceService.insertDevice(device));
}十、常见问题解答
前端
Q:npm install 后启动报 patch-package 相关错误?
原因:node_modules 未完整安装或缓存问题。
# 清除缓存重装
rm -rf node_modules package-lock.json
npm cache clean --force
npm installQ:开发环境接口 404?
检查 .env.development 中 VUE_APP_SERVER_API_URL 是否正确指向后端,并确认后端已启动。
Q:Element UI 弹框(MessageBox)无法弹出?
确认组件已全局注册,项目中通过 Vue.use(Element) 在 main.js 中完成注册,不需要单独引入。
Q:MQTT 连接失败?
- 确认
VUE_APP_MQTT_SERVER_URL配置正确(开发环境ws://localhost:8083/mqtt) - 确认内置 Broker 已启动(
server.broker.enabled: true+server.broker.websocket-port: 8083) - 检查 Token 是否有效(mqttTool 用 Token 作为 MQTT password)
Q:vue-treeselect 出现版本冲突?
项目中统一使用 @riophae/vue-treeselect@0.4.0,不要混用其他版本。
Q:vue-qr 组件导入报错?
// ✅ 正确方式(默认导入)
import vueQr from 'vue-qr';
// ❌ 错误方式(命名导入会失败)
import { VueQr } from 'vue-qr';后端
Q:启动报 license 相关错误?
在 application-dev.yml 中配置正确的证书路径:
license:
subject: common
licensePath: classpath:license.lic向官方申请证书文件(license.lic)放入 resources 目录。
Q:TDengine 报连接超时?
- 确认 TDengine 已启动(默认端口 6041)
- 检查
application-dev.yml中taos数据源配置 - 如不需要时序数据库,可将
taos.enabled: false跳过
Q:规则引擎不触发?
- 确认场景联动状态为"已启用"
- 检查触发器条件(数值范围、比较符号)
- 查看日志中 LiteFlow 执行链路
Q:设备上线但后台看不到在线状态?
- 检查 MQTT 认证(EMQX Webhook 配置)
- 确认设备
serialNumber与系统录入一致 - 查看后端日志是否有设备状态处理记录
Q:如何切换 EMQX 和内置 Broker?
# application.yml
server:
broker:
enabled: true # true = 内置 Netty Broker
# false = 使用外部 EMQX(需配置 spring.mqtt.host-url)Q:多租户数据隔离如何实现?
平台通过 tenant_id(机构 ID)字段隔离数据。Controller 层从 SecurityUtils.getLoginUser() 获取当前登录用户的机构信息,Service 层查询时自动过滤。
Q:Druid 监控页面如何访问?
浏览器访问 http://localhost:8080/druid/index.html,默认账号密码均为 fastbee(可在 application.yml 中修改)。
