IoT-система

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

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(среда разработки)
Единый формат ответа всех интерфейсов:
{
"code": 200,
"msg": "операция выполнена успешно",
"data": { ... }
}Формат ответа постраничного списка:
{
"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 |
Пример входа:
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 | Исторические данные |
9. Стандарты разработки
Соглашения об именовании frontend
| Тип | Стандарт | Пример |
|---|---|---|
| Файлы/каталоги | 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 |
Соглашения об именовании backend
| Тип | Стандарт | Пример |
|---|---|---|
| Имена пакетов | строчные, через точку | 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));
}10. Ответы на частые вопросы
Frontend
Q: После npm install при запуске возникает ошибка, связанная с patch-package?
Причина: node_modules установлен не полностью или проблема с кэшем.
# очистить кэш и переустановить
rm -rf node_modules package-lock.json
npm cache clean --force
npm installQ: В среде разработки интерфейсы возвращают 404?
Проверьте, что VUE_APP_SERVER_API_URL в .env.development правильно указывает на backend, и что backend запущен.
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)
Q: Конфликт версий vue-treeselect?
В проекте единообразно используется @riophae/vue-treeselect@0.4.0, не смешивайте с другими версиями.
Q: Ошибка импорта компонента vue-qr?
// ✅ правильный способ (импорт по умолчанию)
import vueQr from 'vue-qr';
// ❌ неправильный способ (именованный импорт завершится ошибкой)
import { VueQr } from 'vue-qr';Backend
Q: При запуске ошибка, связанная с license?
Настройте правильный путь к сертификату в application-dev.yml:
license:
subject: common
licensePath: classpath:license.licЗапросите файл сертификата (license.lic) у официальной команды и поместите его в каталог resources.
Q: TDengine сообщает о тайм-ауте подключения?
- Убедитесь, что TDengine запущен (порт по умолчанию 6041)
- Проверьте конфигурацию источника данных
taosвapplication-dev.yml - Если база временных рядов не нужна, можно пропустить её через
taos.enabled: false
Q: Механизм правил не срабатывает?
- Убедитесь, что сценарная автоматизация в состоянии «включено»
- Проверьте условия триггера (диапазон значений, операторы сравнения)
- Посмотрите цепочку выполнения LiteFlow в журналах
Q: Устройство в сети, но backend не показывает онлайн-статус?
- Проверьте аутентификацию MQTT (конфигурацию EMQX Webhook)
- Убедитесь, что
serialNumberустройства совпадает с введённым в систему - Проверьте, есть ли в журналах backend записи обработки состояния устройства
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).


