IoT システム

FastBee IoT プラットフォームは、中小企業と個人ユーザー向けに設計された機能豊富な IoT ソリューションです。使いやすいツールと機能を幅広く提供することで、ユーザーがさまざまなスマートデバイスを効果的に管理・制御できるようにします。以下は FastBee IoT プラットフォームの詳細な紹介です。
ページガイド
バージョン比較
FastBee はオープンソース版、商用版、クラスター版の 3 つのバージョンを提供しています。主な違いは以下のとおりです。完全なライセンスポリシーと機能ごとの一覧は商用ライセンスを参照してください。
| 観点 | オープンソース版 | 商用版 | クラスター版 |
|---|---|---|---|
| ライセンス | AGPL v3、無料、非商用用途に限定 | 永続的な商用ライセンス(インストール証明書) | 永続的な商用ライセンス(インストール証明書) |
| ソースコードと更新 | ソースコード公開、Gitee/GitHub で更新 | ライセンス取得後に Git プライベートサーバーで更新、1 年間のソースコード更新付き | 商用版と同じ |
| デプロイ形態 | Docker Compose による単機ワンクリックデプロイ | 単機デプロイ(Docker Compose によるクイックインストールをサポート) | FMQ サービスクラスター + Web クラスター。Kafka とロードバランサーで高可用性を実現 |
| 接続プロトコル | MQTT、GB/T 28181(ライブのみ) | TCP、UDP、CoAP、HTTP、Modbus、JT808 などのプロトコルを追加 | 商用版と同じ |
| 機能範囲 | 製品/デバイス/モノモデル、ルールスクリプト、権限管理などの中核機能 | 可視化大画面、アラームセンター、マルチテナント、OTA ファームウェアアップグレード、データブリッジ、ワークオーダー管理、IoT SIM カード管理などを追加(Web コンフィギュレーション、スマートスピーカーはオプションモジュール) | 商用版と同じ機能、対応デバイス数が異なる |
| 対象シーン | 個人学習と非商用利用 | 中小企業の商用プロジェクト | デバイス接続規模が大きく高可用性が求められる商用プロジェクト |
1. プラットフォーム概要
- プロジェクトの背景:旧称は物美智能(wumei-smart)で、その後、蜂信物联(FastBee)に改称されました。この変更はブランドの更新を反映するだけでなく、IoT 分野での発展とサービス範囲の拡大を示しています。
- 主なサポート:プラットフォームのバックエンドは Spring Boot フレームワークを採用し、フロントエンドは Vue 技術などを使用しています。これらの技術選択により、プラットフォームの使いやすさと優れたユーザーエクスペリエンスが確保されています。
2. システム機能
- 製品管理:製品詳細、モノモデル、分類、デバイス認証などの機能をサポートし、企業がスマート製品をより効果的に整理・管理するのに役立ちます。
- デバイス管理:デバイス詳細、グループ化、ログ記録、リアルタイム状態監視などの管理機能を提供し、デバイス運用の効率と安全性を確保します。
- モノモデル管理:デバイスの属性、機能、イベントを定義でき、デバイスとクラウド間の効果的な通信を実現します。
- ルールエンジン:Groovy(構文は Java と同じ)ベースのルール記述をサポートし、システムが複雑なビジネスロジックを自動的に処理できるようにします。
- シーン連携:直接設定またはビジュアル設定による自動化シーンをサポートし、スマートデバイス間のシームレスな連携を実現します。
- アラームセンター:音声、SMS、WeCom(企業微信)などの複数の通信方式に対応し、デバイスの異常や故障をタイムリーに通知して迅速な対応を保証します。
- マルチテナントシステム:データ分離と独立した設定をサポートし、マルチテナント環境に適しており、システムの柔軟性とセキュリティを高めます。
- ビデオ監視接続:GB/T28181 プロトコルの監視デバイスをサポートし、ライブ、録画再生、PTZ 制御機能を提供し、セキュリティ監視のニーズに対応します。
- シーン管理:複数デバイスの集約表示をサポートし、入力行変数や演算型変数の拡張も可能で、複雑なデータ演算に対応します。
- データブリッジ:外部データシステムとの橋渡しとして、データの入出力などの機能をサポートします。
- データセンター:データレポートの生成、履歴データの閲覧、デバイスのデータ分析をサポートします。
- 通信プロトコル:Mqtt、Modbus、Tcp、GB28182、Http、Coap などの豊富なデバイス通信プロトコルをサポートします。
- IoT SIM カード:デバイス接続の SIM カードを管理し、さまざまな販売代理店プラットフォームとの連携をサポート。カード状態や通信量を確認でき、通信量アラートもサポートします。
- ワークオーダー管理:デバイスや資産の保守、修理、点検などのタスクを、自動化・スマート化・全工程管理でサポートします。
3. 技術スタック
- バックエンド技術:Spring Boot、MyBatis、Spring Security、Jwt、Redis、TDengine などを含み、バックエンドサービスの安定性と高効率を確保しています。
- フロントエンド技術:ES6、ES7、Vue、Vuex、uView、H5 などのモダンなフロントエンド技術を使用し、ユーザーインターフェースのインタラクティブ性と視覚体験を向上させています。
- モバイルサポート:WeChat ミニプログラム、Android、iOS などの複数のモバイルプラットフォームをサポートし、Uniapp によるクロスプラットフォームアプリ開発で、ユーザーがさまざまなデバイスで操作・管理しやすくしています。
4. 応用シーン
FastBee はスマートホーム、スマートオフィス、スマートコミュニティ、農業モニタリング、水利モニタリング、産業制御などのさまざまなシーンに適用できます。これらの応用シーンは家庭から産業レベルまでの幅広いニーズをカバーし、IoT 分野における FastBee の幅広い応用可能性を示しています。

5. システムアーキテクチャ
┌──────────────────────────────────────────────────────────────────┐
│ Browser / Mobile │
│ Vue2 Web (PC) + Vant (H5 / Mini Program) │
└───────────────────────────────┬──────────────────────────────────┘
│ HTTP REST / WebSocket(MQTT)
▼
┌──────────────────────────────────────────────────────────────────┐
│ Nginx (Reverse Proxy) │
│ / → static frontend assets /prod-api/ → backend │
└───────────────────────────────┬──────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Spring Boot Service (8080) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ fastbee-open-api (Controller layer) │ │
│ │ device / product / ruleEngine / media / system / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-service (Service layer) │ │
│ │ IotService / SceneService / NotifyService / ... │ │
│ └────────────────────────┬───────────────────────────────────┘ │
│ ┌─────────────────────────▼──────────────────────────────────┐ │
│ │ fastbee-server (protocol access) │ │
│ │ MQTT Broker(1883) / HTTP(8081) / CoAP(5683) / TCP(8888) │ │
│ └────────────────────────────────────────────────────────────┘ │
└───────────┬──────────────────┬────────────────────┬──────────────┘
│ │ │
MySQL Redis TDengine
(metadata/config) (cache/real-time) (time-series history)6. コード構造
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/ ← 通知サービス(SMS/メール/WeChat など)
│ ├── fastbee-plugs/ ← プラグイン(OSS/OAuth/Quartz/コード生成)
│ ├── fastbee-iot-data/ ← IoT データ処理
│ ├── fastbee-record/ ← 録画サービス
│ ├── fastbee-common-extend/ ← 共通ユーティリティ拡張
│ └── sql/ ← データベース初期化/アップグレードスクリプト
│
├── docker/ ← Docker Compose デプロイファイル
└── sdk/ ← デバイス端 SDK7. 機能モジュール説明
デバイス管理
| 機能 | 説明 |
|---|---|
| デバイス登録/インポート | 手動での新規追加または Excel による一括インポート |
| デバイス割り当て/回収 | 組織/ユーザーの観点でデバイスを割り当て、回収をサポート |
| 状態のリアルタイム更新 | MQTT で /+/{sn}/status/post をサブスクライブし、オンライン/オフライン状態をリアルタイム更新 |
| デバイス QR コード | バインディング用 QR コードを生成、印刷をサポート |
| OTA ファームウェアアップグレード | バージョン管理 + アップグレードタスクの配信 |
| 指令の送信 | モノモデル属性の送信 / 機能呼び出し |
| シャドウモード | デバイスがオフラインのとき、シャドウが最新値をキャッシュ |
ページルート:/iot/device/list → views/iot/device/index.vue
製品管理
| 機能 | 説明 |
|---|---|
| 製品テンプレート | デバイスタイプとモノモデルを定義 |
| モノモデル | 属性(Property)/ 機能(Function)/ イベント(Event)の 3 要素 |
| プロトコル設定 | MQTT / HTTP / CoAP / TCP / Modbus / JT808 |
| 製品公開 | 公開後、デバイスはモノモデルを変更できなくなります |
| ドラッグ&ドロップエディタ | デバイス稼働状態パネルをビジュアルに設定 |
ルールエンジン
| 機能 | 説明 |
|---|---|
| シーン連携 | トリガー → 条件 → アクション のビジュアルオーケストレーション(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 プッシュ、MQTT プッシュ。
システム管理
ユーザー/ロール/組織(マルチテナント)/ メニュー/辞書/ログ/システム監視/コード生成。
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. 開発規約
フロントエンド命名規約
| タイプ | 規約 | 例 |
|---|---|---|
| ファイル/ディレクトリ | 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));
}10. よくある質問
フロントエンド
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)がポップアップしない?
コンポーネントがグローバルに登録されているか確認してください。プロジェクトでは main.js で Vue.use(Element) による登録が完了しており、個別にインポートする必要はありません。
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';バックエンド
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 で変更可能)。


