Eclipse hawkBit + Hara¶
レイヤー: IoTレイヤー
目的¶
Eclipse hawkBitはFlexGalaxy.AIのOTA(Over-The-Air)アップデートおよびアーティファクト配信エンジンであり、マルチテナントアーティファクト管理、CI/CD統合、およびロールアウト管理のためにOTAForgeによってラップされています。hawkBitはソフトウェア、ファームウェア、およびその他のファイルをエッジデバイスに配布する管理を行います — 段階的ロールアウト、安全閾値、およびキャンペーン管理を備えています。
Eclipse HaraはhawkBitのDDI(Device Domain Interface)APIを実装するデバイス側のクライアントライブラリであり、JVMベースのデバイスでのアーティファクトのダウンロード、検証、およびインストールを処理します。
hawkBitを選定した理由¶
基準 |
hawkBit |
|---|---|
ライセンス |
Eclipse Public License 2.0 |
アーティファクトタイプ |
ドメイン非依存 — 任意のバイナリブロブ |
ロールアウト制御 |
設定可能な失敗閾値を備えた段階的ロールアウト |
デバイスAPI |
DDI — HTTPポーリング、永続的な接続は不要 |
マルチテナンシー |
組み込みのテナント分離 |
成熟度 |
Eclipse Foundationプロジェクト、自動車グレードの実績 |
hawkBitが提供する機能¶
hawkBitはすべてのアーティファクトを不透明なバイナリブロブとして扱います。ファイルの内容を解釈せず、各アーティファクトタイプの処理方法はデバイスクライアントが決定します。
ソフトウェアモジュールタイプ¶
タイプキー |
アーティファクトの内容 |
デバイスハンドラー |
|---|---|---|
|
オペレーティングシステムイメージ |
システムアップデートエージェント |
|
ファームウェアバイナリ(MCU、センサー) |
ファームウェアフラッシャー |
|
アプリケーションパッケージ |
アプリインストーラー |
|
ナビゲーションマップ、フロアプラン |
マップローダー(Equator経由) |
|
ML/AIモデルの重み |
MLランタイム(モデルホットスワップ) |
|
設定ファイル、ポリシーバンドル |
設定マネージャー |
|
TLS証明書、デバイスID証明書 |
証明書ストア |
カスタムソフトウェアモジュールタイプはhawkBit Management APIを通じて定義されます。ディストリビューションセットは複数のモジュールタイプを単一のデプロイ可能なユニットにバンドルします — 例えば、ファームウェアアップデート + 新しいナビゲーションマップ + 更新されたMLモデルをまとめてロールアウトできます。
ディストリビューションセットの例¶
Distribution Set: "AMR v2.5.0 + Map Update Q1"
├── Software Module: firmware v2.5.0 (type: firmware)
│ └── artifact: amr-firmware-2.5.0.bin
├── Software Module: nav-map-building-a-v3 (type: mapdata)
│ └── artifact: building-a-floor1.pbstream
│ └── artifact: building-a-floor2.pbstream
└── Software Module: obstacle-detector v1.2 (type: mlmodel)
└── artifact: yolo-obstacle-v1.2.onnx
ロールアウト管理¶
hawkBitは安全制御付きの段階的ロールアウトをサポートします:
Rollout: "Firmware v2.5.0 to Building A AMRs"
├── Phase 1: 10% of targets (canary group)
│ └── Success threshold: 100% (all must succeed before proceeding)
├── Phase 2: 50% of targets
│ └── Success threshold: 90%
└── Phase 3: remaining targets
└── Automatic rollback trigger: > 5% failure rate
ロールアウト機能 |
説明 |
|---|---|
ターゲットフィルタリング |
タイプ、テナント、タグ、またはカスタム属性によるデバイスの選択 |
段階的グループ |
設定可能なサイズの順次デプロイメントグループ |
成功閾値 |
次のフェーズに進む前の最低成功率 |
自動一時停止 |
失敗率が閾値を超えた場合にロールアウトを停止 |
強制アップデート |
重要なセキュリティパッチの確認をスキップ |
メンテナンスウィンドウ |
オフピーク時間帯にロールアウトをスケジュール |
DDI API(Device Domain Interface)¶
DDI APIはhawkBitのデバイス向けインターフェースです。HTTPポーリングを使用し、デバイスが定期的に保留中のアップデートを確認します。FlexGalaxy.AIでは、デバイスはhawkBitに直接ではなく、OTAForgeのプロキシされたDDIエンドポイントをポーリングします。
ポーリングフロー(OTAForge DDIプロキシ経由)¶
Device (Hara) OTAForge DDI Proxy hawkBit
│ │ │
│ GET /ddi/v1/{tenant}/ │ │
│ controller/{id} │ │
│───────────────────────────►│ validate tenant │
│ │ + audit log │
│ │ │
│ │ GET /controller/v1/... │
│ │────────────────────────►│
│ │ │
│ │◄────────────────────────│
│ 200: {deployment actions} │ │
│◄───────────────────────────│ │
│ │ │
│ (download artifacts, │ │
│ report feedback │ │
│ — all via OTAForge) │ │
│ │ │
ポーリング間隔¶
hawkBitサーバーは、コントローラーベースレスポンスのconfig.polling.sleepフィールドを通じてポーリング間隔を制御します。一般的な値:
環境 |
間隔 |
根拠 |
|---|---|---|
本番環境 |
5–15分 |
応答性とサーバー負荷のバランス |
ロールアウト中 |
1–2分 |
アクティブなデプロイメント中のより迅速なフィードバック |
開発環境 |
30秒 |
テスト中の迅速な反復 |
Eclipse Hara — デバイスクライアント¶
HaraはDDIポーリングAPIを実装するJVM/Kotlinライブラリです。デバイス上で動作し、アップデートのライフサイクルを処理します。
Haraの機能¶
機能 |
説明 |
|---|---|
DDIポーリング |
設定可能な間隔、サーバー指示によるオーバーライド |
アーティファクトのダウンロード |
ハッシュ検証(MD5、SHA1、SHA256)付きのレジューム可能なダウンロード |
インストールコールバック |
実際のインストールをデバイス固有のハンドラーに委譲 |
フィードバック報告 |
進捗、成功、または失敗をhawkBitに報告 |
設定管理 |
hawkBitからの設定更新を適用 |
Hara統合パターン¶
// Hara configuration on device
// Points to OTAForge DDI proxy, NOT hawkBit directly
val client = HaraClient.newInstance(
tenant = "building-a",
controllerId = "amr-001",
serverUrl = "https://api.flexgalaxy.com/ddi",
gatewayToken = "<device-specific-token>"
)
// Register artifact handlers per module type
client.onDeployment { action ->
action.modules.forEach { module ->
when (module.type) {
"firmware" -> firmwareUpdater.apply(module.artifacts)
"mapdata" -> mapLoader.load(module.artifacts)
"mlmodel" -> mlRuntime.hotSwap(module.artifacts)
"config" -> configManager.apply(module.artifacts)
"certificate" -> certStore.install(module.artifacts)
}
}
action.reportSuccess()
}
Haraの制限事項¶
制限事項 |
影響 |
緩和策 |
|---|---|---|
JVMのみ |
MCUベースのセンサーでは実行不可 |
hawkBitのAMQP統合または軽量HTTPクライアントを使用 |
Kotlin依存関係 |
デバイスイメージに約2 MBを追加 |
ロボットクラスのデバイス(AMR、清掃ロボット)では許容範囲 |
ネイティブC/Rustポートなし |
制約のあるデバイスには代替が必要 |
コミュニティCクライアントまたはカスタムDDI実装 |
FlexGalaxy.AIでは、Haraは主要なデバイスタイプ(AMR、清掃ロボット、PDA)に適しており、これらはJVM対応です。OTAアップデートが必要な制約のあるセンサーには軽量DDI HTTPクライアントを使用します。
ThingsBoardとの統合¶
hawkBitとThingsBoardは同じデバイスの異なる側面を管理します:
側面 |
ThingsBoard |
hawkBit |
|---|---|---|
デバイスID |
デバイスID + クレデンシャル |
コントローラーID + セキュリティトークン |
接続方式 |
MQTT(永続接続) |
HTTPポーリング(定期的) |
データフロー |
テレメトリ(デバイス → クラウド) |
アーティファクト(クラウド → デバイス) |
状態 |
現在のデバイス状態 |
アップデートデプロイメント状態 |
同期¶
軽量な統合サービスがデバイスIDを同期させます:
Provisioning Service
│
├──► ThingsBoard: create device (device ID, credentials)
│
└──► hawkBit: create target (controller ID, security token)
│
└── controller ID = ThingsBoard device ID (same identifier)
デバイスがプロビジョニングされると、ThingsBoardとhawkBitの両方が同じデバイス識別子を受け取ります。これにより、テレメトリデータとアップデートステータスを関連付けることができます — 例えば、ファームウェアアップデート(hawkBit)をトリガーする前にバッテリーレベル(ThingsBoard)を監視することが可能です。
管理インターフェース¶
hawkBitの組み込みManagement UIは非推奨であり、公式の後継はありません。FlexGalaxy.AIでは、すべてのOTA管理はOTAForgeを通じて行われます。OTAForgeはhawkBitのManagement APIをアカウントスコーピング、CI/CDアクセスキー、およびカスタム管理UIでラップしています。
OTAForge Operator UI — アーティファクト管理、ロールアウトキャンペーン、フリートアップデートステータス
OTAForge Distributor Portal — 外部ディストリビューター向けのWebベースアーティファクト公開
DeviceAdmin — デバイスオーナー向けの読み取り専用OTAステータスビュー
OTAForgeはhawkBitのManagement APIを内部的に使用します:
操作 |
エンドポイント |
説明 |
|---|---|---|
|
ディストリビューションセットの作成 |
|
|
ソフトウェアモジュールとアーティファクトのアップロード |
|
|
ロールアウトキャンペーンの作成 |
|
|
ターゲットのデプロイメント履歴の取得 |
|
|
ロールアウト進捗のモニタリング |
デプロイメント¶
コンポーネント |
目的 |
|---|---|
hawkBit Update Server |
コアAPI、DDIエンドポイント、管理API |
MariaDB / MySQL |
ディストリビューションセット、ターゲット、ロールアウト状態 |
RabbitMQ(オプション) |
イベント駆動型ターゲット通知 |
hawkBitはEKS上で単一のSpring Bootアプリケーションとして稼働します。高可用性のために、複数のレプリカが同じデータベースを共有できます。アーティファクトストレージにはS3互換オブジェクトストレージを使用します。
責務の境界¶
hawkBitが担当する範囲:
エッジデバイスへのソフトウェアおよびアーティファクトの配布
安全閾値付きの段階的ロールアウト
アーティファクトのバージョニングとディストリビューションセット管理
デバイスアップデートライフサイクル(保留中、ダウンロード中、インストール済み、失敗)
あらゆるファイルタイプの配信(ファームウェア、マップ、設定、MLモデル、証明書)
hawkBitが担当しない範囲:
テレメトリ用デバイス接続 → ThingsBoard(DeviceAdmin経由)
リアルタイムデバイス監視 → ThingsBoard(DeviceAdminアラート経由)
デバイスプロビジョニングワークフロー → DeviceAdmin(プロビジョニングサービス経由)
ポリシー駆動型ロールアウト自動化 → OTAForge(DeviceAdminをポーリングし、ポリシーを評価)
テレメトリデータの分析 → StreamPipes(ThingIO経由)
アカウントスコープのアクセス制御 → OTAForge