企業向けIoTプラットフォームの高速開発フレームワーク:PandaX-Go/PandaX

PandaX-Go/PandaXとは

PandaXは、Go言語にて開発されたオープンソースの企業向けIoTプラットフォームを構築するための低コード開発基盤です。go-restful、Vue3.0、TypeScript、vite3、element-Plusを活用したフロントエンドとバックエンドの分離型アーキテクチャを採用しています。デバイス管理、ルールチェーン、クラウド組態、ビジュアライゼーションダッシュボード、レポートデザイナー、フォームデザイナー、コードジェネレーターなどの機能を提供し、高速にIoTプラットフォームや関連業務システムを構築することができます。

プロジェクトURL: https://gitcode.com/PandaX-Go/PandaX

PandaXのプロジェクト概要と主要機能

PandaXは、Go言語を基盤とした企業向けIoTプラットフォームの高速開発フレームワークです。フロントエンドとバックエンドの分離型設計により、柔軟で効率的なIoTソリューションを提供します。多プロトコル接続サポートやコードジェネレーターを活用することで、開発効率を大幅に向上させることができます。

機能 説明
デバイス管理 MQTT、TCP、UDPなど多様なプロトコルをサポートし、デバイスの増加、削除、更新、状態監視、コマンド送信を実現します。
製品管理 デバイステンプレートを定義し、製品分類やグループ管理を行います。
OTAアップデート リモートでのファームウェアアップデートを提供します。

技術アーキテクチャ

PandaXはモジュール化された設計を採用し、以下の主要モジュールを含みます:

モジュール 機能
`アプリケーション` デバイス管理、ルールエンジンなどの業務機能を提供します。
`IoTハブ` 多プロトコル通信をサポートするデバイス接続層を提供します。
`共通ライブラリ` ミドルウェア、データベース操作などの共通機能を提供します。
`デプロイメント` K3Sを活用したコンテナ化デプロイメントを提供します。

フロントエンドとバックエンドの分離型設計

フロントエンドとバックエンドを独立させた設計により、開発効率、メンテナンス性、拡張性を大きく向上させます。

要素 説明
フロントエンド Vue3.0 + TypeScript + Vite3 + Element-plusを活用し、UI開発を迅速に行います。
バックエンド Go 1.20を活用し、go-restfulをベースとした軽量RESTfulフレームワークを提供します。

以下はAPI通信の例です:


// デバイスリストのAPI定義
func GetDeviceListAPI(c *gin.Context) {
    devices, err := service.GetAllDevices()
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    c.JSON(http.StatusOK, devices)
}
設計要素 評価
分離型設計 ⭐⭐⭐⭐
メンテナンス性 ⭐⭐⭐⭐
拡張性 ⭐⭐⭐⭐
パフォーマンス ⭐⭐⭐

多プロトコル接続のサポート

PandaXは、以下のプロトコルをサポートしています:

プロトコル 特徴 適用シーン
MQTT 軽量なパブリッシュ/サブスクライブ型メッセージングプロトコル。 遠隔地のデバイス監視、リアルタイムデータ転送。
TCP 接続指向型の信頼性の高い通信プロトコル。 工業機械制御、リアルタイム通信。
UDP 接続指向でない軽量なプロトコル。 動画ストリーム転送、センサーデータ収集。
HTTP リクエスト/レスポンス型の通信プロトコル。 デバイス管理、設定配信。
gRPC 高パフォーマンスなリモートプロシージャコールプロトコル。 マイクロサービス間の通信、クロスプラットフォーム通信。

以下はMQTT接続の例です:


// EMQXのgrpcフックを初期化
go emqxserver.InitEmqxHook(fmt.Sprintf(":%d", global.Conf.Server.GrpcPort), service)

ルールチェーンの設計と実装

PandaXのルールチェーンは、複雑なデータ処理やビジネスロジックを柔軟に実現します。

モジュール 役割
`アプリケーション/ルール` ルールチェーンの核となる処理を定義します。
`アプリケーション/ルール_ログ` ルールチェーンの実行ログを記録します。
`共通/ルールエンジン` ルールエンジンの初期化と実行を管理します。

ルールノードは以下のような構造を持ちます:


type 処理ノード struct {
    名称     string                 `json:"name"`
    種類     string                 `json:"type"`
    設定     map[string]interface{} `json:"config"`
}

以下はルールチェーンの実行フローです:


func 実行ルールチェーン(input データ) (output データ, err error) {
    for _, ノード := range チェーン.ノード {
        output, err = ノード.処理(input)
        if err != nil {
            return nil, err
        }
        input = output
    }
    return output, nil
}

ルールチェーンの設定例:


{
    "name": "data_processing_chain",
    "nodes": [
        {
            "name": "filter_node",
            "type": "filter",
            "config": {
                "condition": "value > 10"
            }
        },
        {
            "name": "transform_node",
            "type": "transform",
            "config": {
                "operation": "add",
                "value": 5
            }
        }
    ]
}

ルールチェーンのメリット

  • データフィルタリング
  • データ変換
  • イベントトリガー
  • データ保存

タグ: Go言語 Vue3.0 TypeScript モジュール設計 ルールチェーン

5月26日 09:10 投稿