外部プログラム連携
エッジが対応していない設備も、エッジのデータモデルに取り込むことができます。

外部で作成したプログラムが値を読み取り、HTTPでプッシュすると、その値はエッジが直接収集した タグとまったく同じように扱われます。プラットフォーム転送・履歴・アラーム・フローがすべてそのまま適用されます。ドライバを 新しく作る必要はありません。
- エッジにドライバがないプロトコルの設備
- すでに値を読み取っている既存システム(MES・SCADA・自社収集プログラム)
- 計算・加工を経た値を送りたいとき
どのように動作するか
HTTP接続は収集しません。 値を受け取って保持するキャッシュです。
외부 프로그램 ──HTTP──▶ 엣지의 값 캐시 ──timecycle 주기로 샘플링──▶ 태그 이력 · 플랫폼
プッシュしているのに、なぜ値が消えるのか
外側はプッシュでも、エッジの内側は依然としてポーリングだからです。
他のドライバはエッジが設備を直接ポーリングします。HTTPは、その«設備»の位置にキャッシュが置かれた だけで、キャッシュを読み取る側は同じくポーリングです。そのため、プッシュする側と読み取る側のタイミングが ずれると、値がずれます。
| 外側 → エッジ | エッジ → 履歴 | |
|---|---|---|
| 方式 | プッシュ (外部が任意のタイミングで) | ポーリング (timecycle 周期) |
| 取りこぼした場合 | — | 周期間の値は最後の1つだけが残ります |
メッセージを受け取るドライバはすべて同じ構造です。ブローカーから届いたメッセージを«最後の値» 1つで上書きし、収集スケジューラがそれを周期で読み取っていきます。
| ドライバ | 値が入ってくる場所 |
|---|---|
| HTTP | 外部プログラムのリクエスト |
| MQTT Client | 購読したトピック |
| Kafka | コンシューマが受信したレコード |
| WebSocket | 受信フレーム |
そのため、「ブローカーに発行した件数より収集された件数がはるかに少ない」というのは正常です。ブローカーの LAG が 0 なら、エッジはすべて受け取っています — ただし履歴に残るのは周期ごとに1つです。これを 消失と誤解して長時間調査した事例があります (現場事例集)。
この構造に起因する性質があります。まず理解してから始めてください。
| 性質 | 意味 |
|---|---|
| プッシュした値が即座に保存されません | 接続の timecycle 周期でサンプリングされます |
| 周期より速くプッシュすると中間値が消えます | 最後の値だけが残ります |
| 周期より遅くプッシュすると同じ値が繰り返し保存されます | キャッシュに残った値を読み続けます |
すぐに反映させたい場合は timecycle を減らしてください。 この値がそのまま反映遅延です。
1000(1秒)なら最大1秒後に残り、200に減らすと最大0.2秒後に残ります。最小値は
100(0.1秒)です。
| 目的 | timecycle |
|---|---|
| ほぼ即時反映 | 100 ~ 200 |
| 一般的なリアルタイム監視 | 1000 |
| ゆっくり変化する値(温度・水位) | 5000 以上 |
周期を減らすと遅延は減りますが、最後の値1つだけを読み取るという性質はそのままです。周期の間に 値が3回変わったら、最後の1つだけが残ります。
すべてのイベントを1つも漏らさず残す必要があるなら、この方式は適していません。周期をどれだけ 細かくしても同じです。
その接続に紐づくすべてのタグをその周期で読み取ります。タグが多い接続の周期を100に 下げると、負荷がその分大きくなります。速くすべきタグだけを別のHTTP接続を作って、その接続だけ 周期を下げる方が良いです。
ステップ1 — HTTP接続を作成します
画面で接続 → 追加 → HTTP に進みます。
https://<엣지 주소>/ui/connect/http
HTTP接続にはドライバオプションが一切ありません。 IPとポートの欄はありますが、ドライバは 読み取りません — 形式上の入力なので、どの値を入れても動作に影響はありません。
RESTで作成することもできます。8つのフィールドがすべて必須です。
curl -X POST https://<엣지 주소>/api/v1/opc \
-H 'X-API-Key: <API 키>' \
-H 'Content-Type: application/json' \
-d '{
"opc_id": "OPC_EXTERNAL_01",
"opc_name": "외부 수집기",
"opc_type": "HTTP",
"site_id": "SITE_00001",
"opc_agent_ip": "127.0.0.1",
"opc_agent_port": 80,
"timecycle": 1000,
"async": false
}'
| フィールド | ルール |
|---|---|
opc_id | OPC_ で始まり、大文字・数字・アンダースコア1~60文字 |
site_id | SITE_ で始まる |
opc_type | 正確に HTTP である必要があります。異なる場合、値のプッシュが拒否されます |
opc_agent_port | 1~65535 |
timecycle | 100以上(ミリ秒)。この値がそのままサンプリング周期です |
画面で作成すると、欠けた値を画面が補います。そのため、RESTで作成するときだけフィールド欠落により 接続が作成されても動作しないことが起こります。
ステップ2 — タグを登録して tag_id を受け取ります
その接続の下にタグを作成します。値1つがタグ1つです。
データタイプを値の性質に合わせて選んでください。 値が文字列で来ても、宣言したタイプが合っていれば正確に パースされます。逆にタイプが間違っていると、格納段階で例外が発生します。
| 値 | タイプ |
|---|---|
| 電流・温度・電圧・重量・速度・座標 | Double |
| バッテリー・エラーコード・カウンタ | Integer |
| アラーム・状態・エリア・方向・色 | String |
プッシュ時に使用する**tag_id** は、タグ一覧画面またはタグ照会APIで確認します。
ステップ3 — 値をプッシュします
curl -X POST https://<엣지 주소>/api/v1/tag/<tag_id>/value \
-H 'X-API-Key: <API 키>' \
-H 'Content-Type: application/json' \
-d '{"value":"1500"}'
値は文字列で送っても構いません。 タグに宣言したタイプにパースされます。
認証
/api/ 以下はすべて認証がかかります。キーがないとブロックされます — 設定が抜けていても
開きません。
| 方法 | 形式 |
|---|---|
| ヘッダー (推奨) | X-API-Key: <key> |
| ヘッダー | Authorization: Bearer <key> |
| ブラウザセッション | ログイン状態ならキーなしで通過 |
?api_key=… はv1で削除されました。 使用すると401です。古い例をそのまま移さないでください。
HTTPSで呼び出してください
デフォルトがHTTPS専用です。http:// で呼ぶと403が返ります。
値が入ってこないとき
順番に絞り込みます。
- 接続が起動中か — 停止状態だと値を受け取らず拒否します。画面でその接続を 開始してください。
opc_typeがHTTPか — 他のタイプの接続にはプッシュできません。- HTTPSで呼び出したか —
http://は403です。 - キーをヘッダーで送ったか — クエリパラメータは401です。
tag_idが正しいか — タグ一覧で再確認します。- 周期を待ったか — プッシュした直後には保存されません。
timecycle待ってから 履歴を確認します。
知っておくべきこと
一度に1つずつです。 複数のタグを1つのリクエストでプッシュするエンドポイントはありません。タグごとに 個別に呼び出します。
冗長構成でも受け取ります。 書き込み権限がないエッジでも、HTTPでプッシュされる値は継続して 受け取ります。外部連携が冗長切り替えで途切れないように、意図的にそうなっています。
旧エンドポイントがあります。 POST /api/http は opc_id と plc_address で対象を指定する
従来の方式です。2026年12月31日に廃止されます。 レート制限と重複防止も適用されないため、
新しく作る連携は上記の /api/v1/tag/{tag_id}/value を使用してください。
関連ドキュメント
- タグ追加 — タグとデータタイプ
- 接続一覧 — 接続の開始・停止
- PLCアドレスリファレンス — 他のプロトコルのアドレス表記
- 現場事例集 — タイプ例外・空の値が発生したとき