SWPF ノーコード仕組み解説(HTTP / MQTT 受信 → Template / Profile → 自動処理)

SWPF ノーコード仕組み解説

HTTP / MQTT で受信したデータを、Template エンティティProfile エンティティの設定だけで処理する流れ(初心者向け)

対象 SWPF を触り始めた方 / JSON は少し見たことがある方
目的 「データ受信 → ルール判定 → 式の計算 → 実行 → 結果を次へ渡す」全体像を理解する

ポイント: SWPF は「受信データに対して、事前に登録した TemplateProfile の設定で、処理を自動で組み立てる」仕組みです。 コードを書かずに、設定(JSON)だけでルールや式や実行内容を変えられます。

1. SWPFの全体像(まずここだけ)

SWPF では、デバイスから届くデータ(温度・湿度など)を、次の3つで「ノーコード処理」します。

要素 何をする?(初心者向け)
Input(受信データ) HTTP / MQTT で届いた値。例:TEMP=28.4, HUMID=62 など。
Profile(プロファイル) 「このデバイスはどのテンプレを使う?」や「有効/無効」など、運用設定(まとめ役)。
Template(テンプレート) 実際の処理内容。rule_json(条件)と template_json(実行内容・式)を持つ。

処理イメージ(図)

flowchart LR
  A[IoTデバイス] -->|HTTP / MQTT| B[SWPF 受信]
  B --> C[Context 正規化]
  C --> D[Profile 読み込み]
  D --> E[rule_json 判定
どのTemplateを実行するか] E --> F[template_json 実行
EXPRESSION / COMMAND / etc] F --> G[結果を保存
INPUT.RESULTS / TRACE]

※ Mermaid が表示されない場合でも、流れが読めるように文章でも説明します。


2. Template / Profile / Common の役割

Template エンティティ(処理の中身)

  • rule_json:どの条件で、どの処理(テンプレID)を選ぶか(分岐)
  • template_json:選ばれた後に実行する内容(メール送信・式計算・Webhook など)

Profile エンティティ(運用設定・まとめ役)

  • デバイスやユーザーに紐づけて「どの Template を使うか」を管理
  • テンプレを複数まとめる/有効・無効などを切り替える
  • 初心者はまず「1デバイス = 1プロファイル」くらいでOK

Common(共通機能:あれば自動利用)

SWPF は、共通側に「params_map」や「evaluator」があればそれを使い、無ければモジュール内フォールバックで動きます。
つまり、設定(JSON)を変えるだけで、実行ロジックの共通化・再利用がしやすい設計です。


3. 受信データ(HTTP / MQTT)例

HTTP(例:POST JSON)

{
  "device_code": "dev-001",
  "at": "2026-01-03T06:00:00+09:00",
  "TEMP": 28.4,
  "HUMID": 62,
  "CO2": 820
}

受信後、SWPF はこのデータを Context(実行用の入れ物)に正規化します。

MQTT(例:payload JSON)

{
  "device_code": "dev-001",
  "TEMP": 28.4,
  "HUMID": 62,
  "battery": 87
}

MQTT の場合も最終的には同じ Context 形式へ揃えます(HTTP/MQTTの違いは入口だけ)。

初心者ポイント: 入力データのキー(TEMP / HUMID など)は、後で rule_jsonexpr で参照します。
まずは キー名を統一することが成功の近道です。

4. ノーコード処理の流れ(ステップ解説)

  1. 受信:HTTP または MQTT でデータが届く
  2. 正規化:Context に整形(例:input.raws / input.values など)
  3. Profile 決定:device_code などから Profile を選ぶ(または直指定)
  4. rule_json 評価:条件を判定し、実行する Template(または Template 内の分岐先)を決める
  5. template_json 実行EXPRESSION(式)や COMMAND(メール送信等)を実行
  6. 結果保存INPUT.RESULTS に結果を入れて次の処理で参照できるようにする(デバッグ用に TRACE
よくある誤解: Template は「1回だけ」ではなく、ルール次第で 連続して複数 実行されることがあります。
そのため「前の結果を次が使う」仕組み(INPUT.RESULTS)が重要になります。

5. rule_json(条件分岐)の書き方

rule_json は「条件 → 選択結果(template_id など)」を決める JSON です。

最小イメージ

{
  "cases": [
    { "if": "TEMP >= 30", "then": "HOT" },
    { "if": "TEMP <= 10", "then": "COLD" }
  ],
  "default": "DEFAULT"
}
  • cases:上から順に評価します(最初に当たった then を採用)
  • if:条件式(例:TEMP >= 30)
  • then:採用するテンプレID(またはアクション名)
  • default:どれにも当たらない場合
条件式の中の TEMPHUMID は、受信データ(Context)から参照されます。
「受信データに存在しないキー」を参照すると、意図しない結果になります(後述の「つまずき」参照)。

6. template_json(処理テンプレ)の書き方

template_json は、rule_json で選ばれた後に「実行する中身」です。代表例:

type 用途
COMMAND メール送信、Webhook、SwitchBot制御など “実行” mail_send / http_post / mqtt_publish …
EXPRESSION 計算(式)して結果を作る 不快指数、平均、しきい値判定用のスコア
DATA(例) テンプレ内の定数・メッセージなど 通知メッセージ、メール件名の差し替え

テンプレ定義例(差し替えパターン)

{
  "DEFAULT": {
    "mailinfo": {
      "to": "admin@sincerew.biz",
      "subject": "みまもり通知"
    },
    "message": "データを受信しました"
  },

  "HOT": {
    "mailinfo": {
      "subject": "【警告】高温です"
    },
    "message": "温度が高すぎます"
  },

  "DISCOMFORT_INDEX": {
    "type": "EXPRESSION",
    "label": "Discomfort Index",
    "expr": "0.81 * TEMP + 0.01 * HUMID * (0.99 * TEMP - 14.3) + 46.3",
    "result_key": "discomfort_index"
  }
}

上の例では、DEFAULT/HOT は「メール情報や文言」を持ち、DISCOMFORT_INDEX は「式(EXPRESSION)」を持っています。
実際の実行は、選ばれたテンプレと、実行プラグイン(mail_send 等)の組み合わせで行われます。


7. EXPRESSION(式)の書き方・例

EXPRESSION は「受信値(TEMP 等)を使って計算し、結果を result_key に保存する」ための型です。

基本フォーマット

{
  "type": "EXPRESSION",
  "label": "名前(任意)",
  "expr": "計算式(文字列)",
  "result_key": "保存キー"
}

使えること(初心者向け)

  • 四則演算:+ - * /
  • カッコ:( )
  • 数値:整数・小数
  • 変数:受信データのキー(TEMP / HUMID など)
注意: 変数名は「受信データのキー名」と一致させてください(大文字小文字も含む)。
例:TEMP で送っているのに expr 側が temp だと参照できません。

例:不快指数

{
  "type": "EXPRESSION",
  "label": "Discomfort Index",
  "expr": "0.81 * TEMP + 0.01 * HUMID * (0.99 * TEMP - 14.3) + 46.3",
  "result_key": "discomfort_index"
}

8. INPUT.RESULTS / TRACE の考え方

INPUT.RESULTS(次の処理へ渡す “最新の結果”)

例:DISCOMFORT_INDEX を計算したら、input.results.discomfort_index に保存して、次の executor が参照できます。
「結果を次の処理で使う」ための入れ物です。

TRACE(デバッグ用 “履歴”)

どのテンプレが選ばれ、どんな式が評価され、何が返ったかを残します。
本番は RESULTS だけ見れば動きますが、問題が起きたら TRACE が役に立ちます。

SWPF の設計では「RESULTS は最新で上書き」「TRACE は履歴を残す」という運用にすると、
初心者でも混乱が減り、デバッグもしやすい構成になります。

9. 具体例:温湿度 → 不快指数 → メール通知

Step A:受信(例)

{
  "device_code": "dev-001",
  "TEMP": 28.4,
  "HUMID": 62
}

Step B:まず式で不快指数を作る(EXPRESSION)

{
  "DISCOMFORT_INDEX": {
    "type": "EXPRESSION",
    "label": "Discomfort Index",
    "expr": "0.81 * TEMP + 0.01 * HUMID * (0.99 * TEMP - 14.3) + 46.3",
    "result_key": "discomfort_index"
  }
}

Step C:不快指数の結果で分岐(rule_json の例)

{
  "cases": [
    { "if": "discomfort_index >= 80", "then": "ALERT_MAIL" },
    { "if": "discomfort_index >= 75", "then": "WARN_MAIL" }
  ],
  "default": "OK_MAIL"
}

※ ここで discomfort_index を参照できるのは、Step B で result_key に保存したからです。
(実装によって参照場所が input.results.discomfort_index になる場合もあります。SWPF側の参照ルールに合わせてください)

Step D:メールテンプレ(template_json の例)

{
  "ALERT_MAIL": {
    "type": "COMMAND",
    "command": "mail_send",
    "mailinfo": {
      "to": "admin@sincerew.biz",
      "subject": "【警告】危険な暑さです"
    },
    "message": "不快指数が高いです。換気や冷却を検討してください。"
  },

  "WARN_MAIL": {
    "type": "COMMAND",
    "command": "mail_send",
    "mailinfo": {
      "to": "admin@sincerew.biz",
      "subject": "【注意】暑さ注意"
    },
    "message": "不快指数が上がっています。状況を確認してください。"
  },

  "OK_MAIL": {
    "type": "COMMAND",
    "command": "mail_send",
    "mailinfo": {
      "to": "admin@sincerew.biz",
      "subject": "みまもり通知"
    },
    "message": "受信しました(正常範囲)。"
  }
}
これで完成: デバイスからの入力は同じでも、Template / rule_json / expr を変えるだけで挙動を自由に変えられます。

10. よくあるつまずき(初心者チェック)

✅ 1) 受信データのキー名と、expr / if の変数名が一致していない

TEMP を送っているのに expr が temp になっている等。まずはキー名を統一。

✅ 2) 数値が文字列になっている("28.4" など)

数値として演算できない場合があります。可能なら送信側で数値に。

✅ 3) default が無い / 分岐が想定外

cases に当たらないと何も起きないことがあります。default は入れておくと安全。

✅ 4) 結果を次が参照できない(RESULTS の保存先)

“どこに保存されるか” は実装方針(INPUT.RESULTS を key→obj に正規化する等)で変わります。
迷ったら TRACE を確認し、「結果がどのキーに入ったか」を見てください。

デバッグのコツ: まずは「受信した値」と「選ばれたテンプレ」と「計算結果」が TRACE に出ているかを確認します。
そこが揃えば、メールやWebhookのような “実行” は後から足しても比較的安全です。

© SWPF / Sincere Will Platform Framework

 

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