【センサー毎1TOPIC】ESP32からPublishするTOPIC一覧

← 一覧へ戻る 【センサー毎1TOPIC】ESP32からPublishするTOPIC一覧

TOPIC命名規則


1.通常の一斉送信

センサー情報やカメラ情報の一斉送信の場合は以下のトピックで送信します

swpf/{user\id}/{device\id}/{unit\_id}/{channel}

項目説明備考
user\_idサーバーから連携時に取得した顧客のID
device\_idプレフィックス+ハッシュ化したMACアドレス 例:esp32\_xxxxxxxxプレフィックスは、 esp32c3、espcamとかarduinoなど
UNIT\_IDマイコンに接続されるセンサーなどユニットのタイプ+何台目かを表す番号 {device\type}\{index} 例: temperature\1 camera\1 fan\_1詳細は別紙参照
CANNELメッセージの内容を表すコード boot env image/\# status control(Controlは次項の要求と応答で使用) など※ {channel}は以前は/sensor/envでしたがここをenvにしました

swpf/1/esp32\C80CABF16E20/camera\1/image/meta

2.要求送信と応答返信(将来案)

サーバー側から要求に対してESP32が応答を返すような場合は以下のトピックでやり取りします。

※この場合はCannelも限定されます。

制御の場合はControl、ステータス情報要求の場合はstatusになります

Drupal → ESP32 の要求送信:

swpf/{user\id}/{device\id}/{unit\_id}/{channel}/request

ESP32 → Drupal の応答返信:

swpf/{user\id}/{device\id}/{unit\_id}/{channel}/response

例)水やりポンプへの制御要求なら次のようになります

swpf/{user\id}/{device\id}/waterpump\_01/control/request

ESP32からPublishするTOPIC一覧


📊 ESP32送信TOPIC一覧

カテゴリTOPIC内容タイミング重要度
boot/boot起動情報起動時★★★★★
env/envセンサー情報定期★★★★★
image meta/image/meta画像メタ撮影時★★★★★
image begin/image/begin分割開始撮影時★★★★
image chunk/image/chunk画像データ撮影時★★★★★
image end/image/end分割終了撮影時★★★★
error/errorエラー通知異常時★★★★★

📊TOPICごとのPayload項目一覧

①BOOT Payload一覧(swpf.boot.v1)

Topic /SWPF/user\id/device\id/system\_1/boot

キー必須説明
schemastringswpf.boot.v1スキーマバージョン(仕様識別)
typestringbootイベント種別(起動)
user\_idstring123ユーザー識別子
device\_idstringesp32\_C80CABF16E20デバイスID(ESP32)
unit\_idstringthermometer\_1ユニットタイプ+番号
tsnumber1776298443UNIX時刻(秒)※未同期時は0
uptime\_msnumber11357起動からの経過時間(ミリ秒)
wifi\_connectedbooltrueWiFi接続状態
time\_readybooltrueNTP同期状態
ipstring192.168.0.6デバイスのIPアドレス
rssinumber\-51WiFi電波強度(dBm)
heap\_freenumber209032現在の空きヒープメモリ
heap\_minnumber200292起動後の最小ヒープ(最重要)
psram\_freenumber8333584空きPSRAM容量
reset\_reasonstringPOWERONリセット原因
fw\_versionstring1.0.0ファームウェアバージョン
appstringProject TOMATOアプリ識別名

リセット原因詳細

説明検証テスト
POWERON電源投入
EXTERNAL外部リセット
SOFTWAREソフトリセット
PANICクラッシュ
INT\_WDT割り込みWDT
TASK\_WDTタスクWDT
WDTその他WDT
DEEPSLEEPDeepSleep復帰
BROWNOUT電圧低下
SDIOSDIO関連

② ENV Payload一覧(swpf.env.v1)

Topic /SWPF/user\id/device\id/UNIT\ID/env UNIT\IDの命名規則は別紙参照

■ 共通ヘッダ(Bootと共通)

キー必須説明
schemastringswpf.env.v1スキーマバージョン
typestringenvデータ種別(環境データ)
user\_idstringSincereWill-999ユーザー識別
device\_idstringesp32\_C80CABF16E20デバイスID
tsnumber1776296167UNIX時刻(未同期時は0)
uptime\_msnumber13874起動後経過時間(ms)
wifi\_connectedbooltrueWiFi接続状態
time\_readybooltrueNTP同期状態
ipstring192.168.0.6IPアドレス
rssinumber\-54WiFi電波強度(dBm)
heap\_freenumber208856現在の空きヒープ
heap\_minnumber200340起動後最小ヒープ(最重要)
psram\_freenumber8330000空きPSRAM
fw\_versionstring1.0.0ファームウェアバージョン
appstringProject TOMATOアプリ識別

■ センサー情報(ENV固有)

キー必須説明
temperaturenumber / null26.50温度(℃)
humiditynumber / null47.05湿度(%)
luxnumber / null237.50照度(lux)
pressure\_hpanumber / null1013.25気圧(hPa)
co2number / null800CO2濃度(ppm)
soil\_moisturenumber / null45.20土壌水分(%)

値のルール

🔹 nullの扱い

条件出力
センサー未接続null
読取失敗null
無効値null

例:

"co2": null


🔹 数値フォーマット

項目推奨
temperature小数2桁
humidity小数2桁
lux小数1〜2桁
soil\_moisture小数2桁

🔹 CO2ルール

意味
\>0正常値
0 or 負数nullとして扱う

🔹 RSSI目安

状態
\-30〜-50非常に良い
\-50〜-70通常
\-70以下弱い

③ META Payload一覧

Topic /SWPF/user\id/device\id/UNIT\_ID/meta

項目内容用途
typestring"meta" 固定メッセージ種別(meta/begin/chunk/end)
device\_idstringデバイス識別子送信元の特定
event\_idstringイベントID(ユニーク)1枚の画像の識別キー
ts\_msnumber起動後ミリ秒イベント発生タイミング
jpeg\_lennumberJPEGサイズ(バイト)完全受信判定
sha256stringSHA256ハッシュデータ完全性チェック
chunkedboolean分割送信フラグCHUNK再構築判定

④ BEGIN Payload一覧

項目内容用途
typestring"begin" 固定CHUNK送信の開始
device\_idstringデバイスID送信元識別
event\_idstringイベントID画像単位の識別キー
ts\_msnumber起動後ミリ秒タイミング情報
jpeg\_lennumberJPEG総サイズ(bytes)完了判定
chunk\_sizenumber1チャンクのサイズ分割単位
total\_chunksnumberチャンク総数再構築用
sha256stringハッシュ値完全性検証

📊 ③ Error Payload(将来)

トピック

swpf/device/{device\_id}/error

Payload一覧

キー説明
typestringerror
device\_idstringデバイスID
tsnumber時刻
error\_codestringエラーコード
error\_messagestring詳細
contextstring発生箇所

📸 ④ Image Meta(重要)

スケッチの publishChunkFromSd() の最初に送信されるデータです。

トピック

swpf/camera/{device\id}/UNIT\ID/meta

Payload

キー説明
typestringmeta種別
device\_idstringesp32\_xxxデバイス
event\_idstringxxx\_171...イベントID
ts\_msnumber12345millis
jpeg\_lennumber18566画像サイズ
sha256stringxxxxハッシュ
chunkedbooltrue分割送信か

📸 ⑤ Image Begin

トピック

swpf/camera/{device\id}/UNIT\ID/begin

Payload

キー説明
typestringbegin種別
device\_idstringesp32\_xxxデバイス
event\_idstringxxxイベントID
ts\_msnumber12345時刻
jpeg\_lennumber18566サイズ
chunk\_sizenumber2048チャンクサイズ
total\_chunksnumber10総数
sha256stringxxxx整合性確認

📸 ⑥ Image Chunk(バイナリ)

トピック

swpf/camera/{device\id}/UNIT\ID/chunk/{event\_id}/{index}

Payload

👉 バイナリ(JPEGの一部)

項目内容
payloadJPEGデータ(分割)
indextopicから取得
event\_idtopicから取得

---

📸 ⑦ Image End

トピック

swpf/camera/{device\id}/UNIT\ID/end

Payload

キー説明
typestringend
device\_idstringデバイス
event\_idstringイベントID
total\_chunksnumberchunk数

🔗 event\_id の役割(重要)

event\id \= device\id \+ timestamp \+ millis

👉 これで

  • meta
  • begin
  • chunk
  • end

を1つの画像としてまとめる


🧠 Payload設計の思想(SWPF)

① 必ず type を持つ

→ Drupal側で判別

② event\_id で束ねる

→ 非同期でも再構築可能

③ chunkはtopicで識別

→ JSON不要・高速

④ meta → begin → chunk → end の順

→ ストリーミング設計


🔥 Drupal側での使い分け

type保存先
bootdevice\status \+ event\log
heartbeatdevice\_status
errorevent\_log
metacapture\_log
begincapture\_session
chunktemp storage
endfile保存

🚀 この構成の強み

  • スケーラブル
  • 非同期耐性あり
  • 再送対応しやすい
  • YOLOなどAIと相性◎
  • Drupalでの集約が簡単

🎯 あなた向け最適まとめ

あなたの構成だと👇

  • Boot → 状態監視
  • Image → AI解析
  • MQTT → 非同期連携
  • Drupal → 集約・可視化

このPayload設計はかなり理想形です。


👉 次にやるべきこと

ここまで来たら次はこれ👇

  1. Drupal受信API(完成版コード)
  2. 画像復元処理(chunk→JPEG)
  3. 管理画面(一覧 \+ 詳細)

必要なら 👉「そのまま動くDrupalモジュール(ZIP)」出せます。

🧠 各TOPICの中身(軽量版)


🔹 boot(起動時)

{

"type": "boot",

"fw": "0.0.1",

"ip": "192.168.0.6"

}

👉 device\_idはトピックに含まれるので省略OK


🔹 env

{

"t": 25.6,

"h": 60.2

}


🔹 image/meta

{

"e": "event\_id",

"s": 18234,

"w": 640,

"h": 480

}


🔹 image/chunk

👉 バイナリ or base64


🔹 error

{

"c": 1001

}


🚀 設計ポイント(重要)

① device\_idをトピックに含める

👉 JSON軽量化できる


② sys配下で管理

/sys/mem

/sys/wifi

👉 拡張しやすい


③ imageは分離

👉 chunk対応しやすい


④ 短縮キー推奨

👉 JSONサイズ削減


🔥 一言

👉 「シンプルなTOPIC \= 強いシステム」

 

当サイトまたはIoTカスタムモジュール、開発支援に関するお問い合わせはこちらのメールフォームからお気軽にお問い合わせください。