Sensor Relay System Architecture

📊 Dashboard 🏠 Home
🏗️

Sensor Relay Gateway

産業用センサーデバイスを統合管理するリアルタイムゲートウェイシステム。 シリアル通信・TCP・シミュレータの複数デバイスを同時に管理し、 データ収集・アラート・MQTT転送・可視化までをワンストップで提供します。

📡 マルチデバイス ⚡ リアルタイム 🔔 アラート 📊 Prometheus 🌐 MQTT Bridge 🔒 認証 / RBAC 🐳 Docker 📈 Grafana

🗺️ システム構成図

flowchart TB
    subgraph DEVICES["🔌 デバイス層"]
        direction LR
        ARD["🔧 Arduino
Serial Device"] SIM["🔮 Simulator
仮想デバイス"] TCP_DEV["🌐 TCP Device
ネットワーク"] end subgraph GATEWAY["⚙️ Gateway 層 — FastAPI"] direction TB DM["📡 Device Manager
デバイス管理"] SM["🔌 Serial Manager
シリアル通信"] TC["🌐 TCP Transport
TCP受信"] DD["🔍 Auto Detector
自動検出"] subgraph PROCESSING["データ処理"] direction LR BUF["📦 Data Buffer"] ALM["🔔 Alert Manager"] WH["🪝 Webhook"] MET["📊 Metrics"] end subgraph SECURITY["セキュリティ"] direction LR AUTH["🔒 Auth Middleware"] RBAC["👥 API Key / RBAC"] end API["🌍 REST API
OpenAPI / Swagger"] WS_SRV["⚡ WebSocket Server"] DM --> SM DM --> TC DD --> DM SM --> BUF TC --> BUF BUF --> ALM ALM --> WH BUF --> MET AUTH --> API RBAC --> AUTH end subgraph DATA["💾 データ層"] direction LR SQLITE["🗃️ SQLite
sensor_data.db"] INFLUX["📈 InfluxDB
時系列DB"] JSON_STORE["📄 JSON Store
devices.json"] end subgraph EXTERNAL["🌐 外部連携"] direction LR MQTT["📮 MQTT Broker
メッセージ転送"] PROM["📊 Prometheus
メトリクス収集"] GRAF["📈 Grafana
ダッシュボード"] end subgraph FRONTEND["🖥️ フロントエンド"] direction LR DASH["🌐 Web Dashboard
PWA対応"] WS_CLI["⚡ WebSocket
リアルタイム通信"] end ARD -- "Serial
USB" --> SM SIM -- "PTY" --> SM TCP_DEV -- "TCP:6041" --> TC BUF --> SQLITE BUF --> INFLUX DM --> JSON_STORE DM -- "MQTT Bridge" --> MQTT MET -- ":6040/metrics" --> PROM PROM --> GRAF API -- "HTTP :6040" --> DASH WS_SRV -- "WS" --> WS_CLI

🔄 データフロー

1
🔧
デバイス接続
Serial / TCP / Simulator からデータ受信
2
⚙️
パース & バッファ
JSON パース、Data Buffer に蓄積
3
🔔
アラート評価
閾値ルールに基づいてアラート発火
4
💾
永続化
SQLite / InfluxDB に保存
5
📊
可視化 & 通知
Dashboard / Grafana / Webhook

🧩 コンポーネント詳細

📡
Device Manager
全デバイス(実機・シミュレータ・TCP)のライフサイクルを一元管理。 登録・削除・コマンド送信・状態監視を提供します。
device_manager.py Multi-device
🔌
Serial Manager
USB シリアルポート経由のデバイス通信を処理。 非同期読み取りとイベントリスナーパターンで実装。
serial_manager.py async I/O
🌐
TCP Transport
ネットワーク経由のセンサーデバイスをTCPサーバーで受け付け。 接続・切断時にデバイスを自動登録/削除します。
tcp_transport.py Port 6041
🔮
Simulator
仮想シリアルポート (PTY) でセンサー・アクチュエータ・GPS の 模擬データを生成。開発・テスト用途に最適です。
simulator/ sensor actuator gps
🔔
Alert Engine
閾値ベースのアラートルールエンジン。条件一致時にイベント発火、 Webhook 経由で外部サービスへ通知できます。
alerts.py webhook.py Threshold
📮
MQTT Bridge
デバイスデータを MQTT ブローカーへリアルタイム転送。 IoT プラットフォームとの統合やデバイス間連携に使用します。
mqtt_bridge.py Pub/Sub
🗃️
Database (SQLite)
センサーデータを SQLite に永続化。 時間範囲クエリ、CSV/JSON エクスポート機能を提供します。
database.py Export CSV/JSON
📈
InfluxDB Bridge
時系列データベース InfluxDB への非同期書き込み。 高頻度データの長期保存と高速クエリを実現します。
influx_bridge.py Time-series
📊
Prometheus Metrics
Prometheus 互換の /metrics エンドポイント。 デバイス数、メッセージ数、センサー値をエクスポートします。
metrics.py OpenMetrics
🖥️
Web Dashboard
PWA 対応のリアルタイムダッシュボード。 デバイス管理・データ可視化・アラート・ログを統合表示します。
dashboard/ PWA WebSocket
🔒
Security
API キーベースの認証ミドルウェアと RBAC(admin/viewer)。 レートリミットと CORS 制御もサポートします。
security.py API Key Rate Limit
🔍
Auto Detector
シリアルポートを定期スキャンし、新しいデバイスを自動検出。 プラグアンドプレイのデバイス管理を実現します。
device_detector.py Plug & Play

🔌 ポート構成

:6040
Sensor Relay API
REST API + Dashboard + WebSocket
:6041
TCP Transport
TCP デバイス接続ポート
:9090
Prometheus
メトリクス収集サーバー
:3000
Grafana
可視化ダッシュボード
:1883
MQTT Broker
メッセージブローカー(外部)

🛠️ 技術スタック

技術 用途 バージョン
🐍 Python アプリケーション言語 3.12
FastAPI Web フレームワーク(REST API + WebSocket) 0.115+
🦄 Uvicorn ASGI サーバー 0.30+
🔧 pySerial シリアルポート通信
🗃️ SQLite (aiosqlite) ローカルデータベース
📈 InfluxDB 時系列データベース 2.x
📮 MQTT (aiomqtt) メッセージブローカー連携
📊 Prometheus メトリクス監視 latest
📉 Grafana ダッシュボード・可視化 latest
🐳 Docker / Compose コンテナ化・デプロイ
🤖 Arduino センサーデバイスファームウェア