Skip to content

IoT-система ​

Обзорная схема IoT-системы FastBee

IoT-платформа FastBee — это многофункциональное IoT-решение, разработанное для малого и среднего бизнеса и индивидуальных пользователей. Платформа предоставляет набор удобных инструментов и функций, позволяющих эффективно управлять разнообразными умными устройствами и контролировать их. Ниже приведено подробное описание IoT-платформы FastBee:

Обзор страницы ​

Содержание страницыОбщее введение в IoT-платформу FastBee: предыстория проекта, функции системы, технологический стек, сценарии применения и архитектура системы.
Кому подходитЧитателям, впервые знакомящимся с возможностями и архитектурой коммерческой версии платформы; формирует общее представление о продукте.
ТребованияНет; далее можно продолжить чтение глав об архитектуре и установке в рекомендуемом порядке.

Сравнение версий ​

FastBee доступна в трёх версиях: open-source, коммерческая и кластерная. Основные различия приведены ниже; полную политику лицензирования и постатейный перечень функций см. в Коммерческая лицензия.

КритерийOpen-sourceКоммерческаяКластерная
ЛицензияAGPL v3, бесплатно, только некоммерческое использованиеБессрочная коммерческая лицензия (лицензионный сертификат)Бессрочная коммерческая лицензия (лицензионный сертификат)
Исходный код и обновленияИсходный код открыт, обновления на Gitee/GitHubПосле лицензирования обновления через приватный Git, год обновлений исходного кода в подарокКак в коммерческой
Форма развёртыванияОдносерверное развёртывание Docker Compose в один кликОдносерверное развёртывание (поддерживается быстрая установка Docker Compose)Кластер сервисов FMQ + Web-кластер, высокая доступность через Kafka и балансировку нагрузки
Протоколы подключенияMQTT, GB/T 28181 (только прямые трансляции)Дополнительно TCP, UDP, CoAP, HTTP, Modbus, JT808 и другие протоколыКак в коммерческой
Состав функцийПродукты/устройства/модели вещей, скрипты правил, управление правами и другие ключевые возможностиДобавляются большие экраны визуализации, центр оповещений, мультитенантность, OTA-обновление прошивок, мост данных, управление заявками, управление IoT-картами и др. (Web-SCADA и умная колонка — опциональные модули)Функции как в коммерческой, отличается поддерживаемое количество устройств
Сценарии примененияЛичное обучение и некоммерческое использованиеКоммерческие проекты малого и среднего бизнесаКоммерческие проекты с большим количеством устройств и высокими требованиями к доступности

1. Обзор платформы ​

  • Предыстория проекта: первоначальное название — wumei-smart (物美智能), позже переименован в FastBee (蜂信物联). Это изменение отражает не только обновление бренда, но и развитие проекта в области интернета вещей и расширение сферы услуг.
  • Основные технологии: backend платформы использует фреймворк Spring Boot, frontend — Vue и другие технологии; такой выбор обеспечивает удобство использования и хороший пользовательский опыт.

2. Функции системы ​

  • Управление продуктами: поддержка деталей продукта, моделей вещей, категорий и авторизации устройств; помогает компаниям лучше организовать свои умные продукты и управлять ими.
  • Управление устройствами: детали устройств, группировка, журналирование, мониторинг состояния в реальном времени и другие функции управления, обеспечивающие эффективную и безопасную работу устройств.
  • Управление моделями вещей: позволяет определять свойства, функции и события устройств для эффективного взаимодействия устройств с облаком.
  • Механизм правил: поддержка правил на Groovy (синтаксис как в Java), благодаря чему система может автоматически обрабатывать сложную бизнес-логику.
  • Сценарная автоматизация: поддержка прямой и визуальной настройки сценариев автоматизации для бесшовного взаимодействия умных устройств.
  • Центр оповещений: интеграция с различными каналами связи — голос, SMS и WeCom — для своевременных уведомлений об аномалиях или сбоях устройств и быстрого реагирования.
  • Мультитенантность: изоляция данных и независимая конфигурация для мультитенантных сред, повышающая гибкость и безопасность системы.
  • Подключение видеонаблюдения: поддержка устройств видеонаблюдения по протоколу GB/T28181, прямые трансляции, воспроизведение записей и управление PTZ — для задач охранного видеонаблюдения.
  • Управление сценами: агрегация отображения нескольких устройств, расширяемые вводимые и вычисляемые переменные, поддержка сложных вычислений над данными.
  • Мост данных: служит мостом к внешним системам данных, поддерживает ввод и вывод данных.
  • Центр данных: формирование отчётов по данным, просмотр исторических данных, анализ данных устройств.
  • Протоколы связи: поддержка богатого набора протоколов устройств: Mqtt, Modbus, Tcp, GB28182, Http, Coap и др.
  • IoT-карты: управление SIM-картами подключения устройств, интеграция с платформами разных операторов, просмотр состояния карт и трафика, оповещения о трафике.
  • Управление заявками: автоматизированное, интеллектуальное и сквозное управление задачами обслуживания, ремонта и проверки устройств или активов.

3. Технологический стек ​

  • Backend-технологии: Spring Boot, MyBatis, Spring Security, Jwt, Redis, TDengine и др., обеспечивающие стабильность и эффективность backend-сервисов.
  • Frontend-технологии: ES6, ES7, Vue, Vuex, uView, H5 и другие современные frontend-технологии, повышающие интерактивность и визуальное качество интерфейса.
  • Поддержка мобильных платформ: мини-программы WeChat, Android и iOS; кроссплатформенная разработка на Uniapp, удобная работа и управление с разных устройств.

4. Сценарии применения ​

FastBee подходит для умного дома, умного офиса, умного района, сельскохозяйственного мониторинга, гидротехнического мониторинга, промышленного управления и других сценариев. Эти сценарии охватывают широкий спектр потребностей — от домашних до промышленных — и демонстрируют широкий потенциал применения FastBee в области интернета вещей.

Схема сценариев применения FastBee

5. Архитектура системы ​

┌──────────────────────────────────────────────────────────────────┐
│                 Браузер / мобильное приложение                   │
│      Vue2 Web (ПК)    +    Vant (H5 / мини-программа)            │
└───────────────────────────────┬──────────────────────────────────┘
                                │ HTTP REST / WebSocket(MQTT)
                                ▼
┌──────────────────────────────────────────────────────────────────┐
│                     Nginx (обратный прокси)                      │
│      /  → статические ресурсы frontend    /prod-api/ → backend   │
└───────────────────────────────┬──────────────────────────────────┘
                                │
                                ▼
┌──────────────────────────────────────────────────────────────────┐
│                  Сервис 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
     (метаданные/      (кэш/значения       (история временных
      конфигурация)     реального времени)      рядов)

6. Структура кода ​

fastbee/
├── vue/                        ← frontend-проект 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/                 ← многомодульный backend-проект Spring Boot
│   ├── fastbee-admin/          ← контроллеры админки + конфигурация
│   ├── fastbee-open-api/       ← уровень Open API (Controller IoT-бизнеса)
│   ├── 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/         ← сервис уведомлений (SMS/почта/WeChat и др.)
│   ├── fastbee-plugs/          ← плагины (OSS/OAuth/Quartz/генерация кода)
│   ├── fastbee-iot-data/       ← обработка IoT-данных
│   ├── fastbee-record/         ← сервис видеозаписи
│   ├── fastbee-common-extend/  ← расширения общих утилит
│   └── sql/                    ← скрипты инициализации/обновления БД
│
├── docker/                     ← файлы развёртывания Docker Compose
└── sdk/                        ← SDK для устройств

7. Описание функциональных модулей ​

Управление устройствами ​

ФункцияОписание
Регистрация/импорт устройствРучное добавление или пакетный импорт устройств из Excel
Назначение/возврат устройствНазначение устройств по организациям/пользователям, поддержка возврата
Обновление состояния в реальном времениОбновление онлайн/офлайн-статуса через подписку MQTT на /+/{sn}/status/post
QR-код устройстваГенерация QR-кода привязки, поддержка печати
OTA-обновление прошивкиУправление версиями + доставка задач обновления
Отправка командОтправка свойств модели вещи / вызов функций
Режим тениПри офлайн-устройстве последние значения кэшируются в тени

Маршрут страницы: /iot/device/list → views/iot/device/index.vue

Управление продуктами ​

ФункцияОписание
Шаблон продуктаОпределение типа устройства и модели вещи
Модель вещиТри элемента: свойство (Property) / функция (Function) / событие (Event)
Настройка протоколаMQTT / HTTP / CoAP / TCP / Modbus / JT808
Публикация продуктаПосле публикации модель вещи устройства изменить нельзя
Редактор drag-and-dropВизуальная настройка панели состояния работы устройства

Механизм правил ​

ФункцияОписание
Сценарная автоматизацияВизуальная оркестровка «триггер → условие → действие» (на движке LiteFlow)
Оповещения об устройствахСрабатывание по порогу/диапазону/булеву значению, поддержка периода тишины
Скрипты правилОбработка исходных данных скриптами Groovy/JavaScript
Запуск в один кликРучной запуск сценарной автоматизации

Центр данных ​

ФункцияОписание
Данные в реальном времениПоследние отправленные значения модели вещи устройства (кэш Redis)
Исторические данныеЗапросы по периодам времени (база временных рядов TDengine)
Отчёты по даннымПериодическое формирование Excel, поддержка уведомлений по почте
Экспорт данныхЗагрузка исторических данных

Видеонаблюдение ​

ФункцияОписание
Подключение устройствПоддержка протокола GB28181 (SIP)
Воспроизведение в реальном времениRTMP / RTSP / FLV / HLS / WebRTC
Воспроизведение записейЗапрос архивных записей по периодам (ZLMediaKit)
Управление PTZОтправка PTZ-команд
Голосовая двусторонняя связьАктивный режим SIP TCP

Сервис уведомлений ​

Поддерживаемые каналы: SMS (Alibaba Cloud/Tencent), электронная почта, официальный аккаунт WeChat, WeCom, DingTalk, HTTP-push, MQTT-push.

Системное управление ​

Пользователи/роли/организации (мультитенантность)/меню/словари/журналы/мониторинг системы/генерация кода.

8. Документация API ​

Полная документация по интерфейсам доступна через Swagger: http://localhost:8080/swagger-ui/index.html (среда разработки)

Единый формат ответа всех интерфейсов:

json
{
  "code": 200,
  "msg": "операция выполнена успешно",
  "data": { ... }
}

Формат ответа постраничного списка:

json
{
  "code": 200,
  "msg": "операция выполнена успешно",
  "rows": [ ... ],
  "total": 100
}

Интерфейсы аутентификации ​

МетодПутьОписание
POST/loginВход по логину и паролю
POST/registerРегистрация пользователя
POST/logoutВыход
GET/getInfoПолучение информации о текущем пользователе
GET/captchaImageПолучение графической капчи
POST/auth/sms/loginВход по SMS-коду
GET/auth/login/{loginId}Вход через сторонние соцсети
POST/auth/ssoLoginЕдиный вход SSO

Пример входа:

bash
POST /login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123",
  "code": "1234",
  "uuid": "xxx-xxx-xxx",
  "sourceType": 1
}
json
{
  "code": 200,
  "msg": "операция выполнена успешно",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIs..."
  }
}

Последующие запросы должны содержать заголовок: Authorization: Bearer {token}

Интерфейсы устройств (/iot/device) ​

МетодПутьПравоОписание
GET/iot/device/listiot:device:listПостраничный список устройств
GET/iot/device/shortListiot:device:listКраткий список устройств (главная страница)
GET/iot/device/alliot:device:listКраткий список всех устройств
GET/iot/device/{deviceId}iot:device:queryДетали устройства
GET/iot/device/getDeviceBySerialNumber/{sn}iot:device:queryПоиск по серийному номеру
POST/iot/deviceiot:device:addДобавление устройства
PUT/iot/deviceiot:device:editИзменение устройства
DELETE/iot/device/{deviceId}iot:device:removeУдаление устройства
POST/iot/device/exportiot:device:exportЭкспорт в Excel
POST/iot/device/assignmentiot:device:assignmentНазначение устройства организации
POST/iot/device/user/assignmentiot:device:assignmentНазначение устройства пользователю
POST/iot/device/recoveryiot:device:recoveryВозврат устройства
GET/iot/device/runningStatusiot: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Исторические данные

9. Стандарты разработки ​

Соглашения об именовании frontend ​

ТипСтандартПример
Файлы/каталогиkebab-casedevice-edit.vue
Имена компонентовPascalCaseDeviceCard
Переменные/методыcamelCasedeviceList, handleQuery()
КонстантыUPPER_CASEMAX_PAGE_SIZE
Файлы APIcamelCasedevice.js, product.js
Имена CSS-классовkebab-case.device-item

Соглашения об именовании backend ​

ТипСтандартПример
Имена пакетовстрочные, через точкуcom.fastbee.iot.service
Имена классовPascalCaseDeviceServiceImpl
Имена интерфейсовI + PascalCaseIDeviceService
Имена методовcamelCaselistDeviceByGroup()
КонстантыUPPER_SNAKEMAX_RETRY_COUNT
Таблицы БДстрочные через подчёркиваниеiot_device
Поля БДстрочные через подчёркиваниеserial_number

Стандарты проектирования API ​

  • Стиль RESTful, имена ресурсов — существительные во множественном числе
  • Единые префиксы маршрутов: /iot/ (модуль IoT), /system/ (системный модуль)
  • Controller наследует BaseController, проверка прав через @PreAuthorize
  • Журналирование операций аннотацией @Log
  • Единый возврат через AjaxResult.success() / getDataTable()
java
@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));
}

10. Ответы на частые вопросы ​

Frontend ​

Q: После npm install при запуске возникает ошибка, связанная с patch-package?

Причина: node_modules установлен не полностью или проблема с кэшем.

bash
# очистить кэш и переустановить
rm -rf node_modules package-lock.json
npm cache clean --force
npm install

Q: В среде разработки интерфейсы возвращают 404?

Проверьте, что VUE_APP_SERVER_API_URL в .env.development правильно указывает на backend, и что backend запущен.

Q: Диалоги Element UI (MessageBox) не открываются?

Убедитесь, что компонент зарегистрирован глобально: в проекте регистрация выполняется через Vue.use(Element) в main.js, отдельный импорт не требуется.

Q: Ошибка подключения MQTT?

  1. Проверьте правильность VUE_APP_MQTT_SERVER_URL (в среде разработки ws://localhost:8083/mqtt)
  2. Убедитесь, что встроенный Broker запущен (server.broker.enabled: true + server.broker.websocket-port: 8083)
  3. Проверьте действительность Token (mqttTool использует Token как пароль MQTT)

Q: Конфликт версий vue-treeselect?

В проекте единообразно используется @riophae/vue-treeselect@0.4.0, не смешивайте с другими версиями.

Q: Ошибка импорта компонента vue-qr?

javascript
// ✅ правильный способ (импорт по умолчанию)
import vueQr from 'vue-qr';
// ❌ неправильный способ (именованный импорт завершится ошибкой)
import { VueQr } from 'vue-qr';

Backend ​

Q: При запуске ошибка, связанная с license?

Настройте правильный путь к сертификату в application-dev.yml:

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

Запросите файл сертификата (license.lic) у официальной команды и поместите его в каталог resources.

Q: TDengine сообщает о тайм-ауте подключения?

  1. Убедитесь, что TDengine запущен (порт по умолчанию 6041)
  2. Проверьте конфигурацию источника данных taos в application-dev.yml
  3. Если база временных рядов не нужна, можно пропустить её через taos.enabled: false

Q: Механизм правил не срабатывает?

  1. Убедитесь, что сценарная автоматизация в состоянии «включено»
  2. Проверьте условия триггера (диапазон значений, операторы сравнения)
  3. Посмотрите цепочку выполнения LiteFlow в журналах

Q: Устройство в сети, но backend не показывает онлайн-статус?

  1. Проверьте аутентификацию MQTT (конфигурацию EMQX Webhook)
  2. Убедитесь, что serialNumber устройства совпадает с введённым в систему
  3. Проверьте, есть ли в журналах backend записи обработки состояния устройства

Q: Как переключаться между EMQX и встроенным Broker?

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