Nodeflux Central
Vehicle Analytics (MVA/MVAA)

API Reference — Vehicle Analytics

Referensi endpoint REST API untuk pipeline Vehicle Analytics (MVA/MVAA) — spawn, status, update konfigurasi, hapus, MJPEG stream, dan snapshot.

Semua endpoint di halaman ini menggunakan basis URL Visionaire API (VISIONAIRE_API_URL, default http://localhost:4004) — bukan URL Lenz/dashboard. Tidak ada autentikasi header yang diperlukan pada pemanggilan langsung ke Visionaire API; autentikasi dikelola di layer gateway jika dikonfigurasi.


Manajemen Pipeline

Endpoint untuk membuat, membaca status, memperbarui konfigurasi, dan menghapus pipeline Vehicle Analytics. Setiap pipeline diidentifikasi oleh kombinasi node_num, stream_id, dan analytic_id.

POST
/pipeline/{node_num}/{stream_id}/NFV4-MVA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node. Gunakan 0 untuk deployment single-node.

stream_id*string

ID stream video yang akan dianalisis.

analytic_id*string

ID analitik: NFV4-MVA atau NFV4-MVAA.

Value in"NFV4-MVA" | "NFV4-MVAA"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA" \  -H "Content-Type: application/json" \  -d '{    "object_confidence_threshold": 0.4,    "sub_analytics": [      {        "name": "counting",        "is_active": true,        "dumping_sampling_time": 1000,        "lines": [          {            "id": "gate_1",            "name": "Gate A",            "points": [              [                0.2,                0.5              ],              [                0.8,                0.5              ]            ],            "direction": "both"          }        ]      },      {        "name": "roi_counting",        "is_active": false      },      {        "name": "dwelling",        "is_active": false      },      {        "name": "density",        "is_active": false      }    ]  }'
{  "code": 200,  "message": "Pipeline created successfully",  "data": {    "pipeline_id": "NFV4-MVA",    "stream_id": "stream_001",    "status": "running"  }}
{  "code": 400,  "message": "Invalid configuration: lines array is required for counting"}
GET
/pipeline/{node_num}/{stream_id}/NFV4-MVA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node. Gunakan 0 untuk deployment single-node.

stream_id*string

ID stream video yang akan dianalisis.

analytic_id*string

ID analitik: NFV4-MVA atau NFV4-MVAA.

Value in"NFV4-MVA" | "NFV4-MVAA"

Response Body

application/json

application/json

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA"
{  "code": 200,  "data": {    "analytic_id": "NFV4-MVA",    "stream_id": "stream_001",    "status": "running",    "uptime_seconds": 3600,    "processed_frames": 43200  }}
{  "code": 404,  "message": "Pipeline not found"}
PUT
/pipeline/{node_num}/{stream_id}/NFV4-MVA/config

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer
stream_id*string
analytic_id*string

ID analitik Vehicle Analytics. Gunakan NFV4-MVA untuk counting/dwelling/density tanpa atribut, atau NFV4-MVAA untuk menambahkan klasifikasi warna, tipe, dan merek kendaraan.

Value in"NFV4-MVA" | "NFV4-MVAA"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X PUT "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA/config" \  -H "Content-Type: application/json" \  -d '{    "object_confidence_threshold": 0.5,    "sub_analytics": [      {        "name": "counting",        "is_active": true,        "object_confidence_threshold": 0.5      }    ]  }'
{  "code": 200,  "message": "Configuration updated successfully"}
{  "code": 400,  "message": "Cannot update configuration: invalid parameter value"}
DELETE
/pipeline/{node_num}/{stream_id}/NFV4-MVA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node. Gunakan 0 untuk deployment single-node.

stream_id*string

ID stream video yang akan dianalisis.

analytic_id*string

ID analitik: NFV4-MVA atau NFV4-MVAA.

Value in"NFV4-MVA" | "NFV4-MVAA"

Response Body

application/json

curl -X DELETE "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA"
{  "code": 200,  "message": "Pipeline deleted successfully"}

Visual Monitoring

Endpoint untuk mengambil output visual dari pipeline yang sedang berjalan. Berguna untuk verifikasi posisi garis counting dan zona ROI, serta monitoring langsung di dashboard.

GET
/pipeline/{node_num}/{stream_id}/NFV4-MVA/mjpeg

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer
stream_id*string
analytic_id*string

ID analitik Vehicle Analytics. Gunakan NFV4-MVA untuk counting/dwelling/density tanpa atribut, atau NFV4-MVAA untuk menambahkan klasifikasi warna, tipe, dan merek kendaraan.

Value in"NFV4-MVA" | "NFV4-MVAA"

Query Parameters

quality?integer

Kualitas JPEG untuk setiap frame (1–100).

Default80
Range1 <= value <= 100
fps?integer

Target frame rate stream MJPEG.

Default12
Range1 <= value <= 30

Response Body

multipart/x-mixed-replace

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA/mjpeg"
"string"
GET
/pipeline/{node_num}/{stream_id}/NFV4-MVA/snapshot

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer
stream_id*string
analytic_id*string

ID analitik Vehicle Analytics. Gunakan NFV4-MVA untuk counting/dwelling/density tanpa atribut, atau NFV4-MVAA untuk menambahkan klasifikasi warna, tipe, dan merek kendaraan.

Value in"NFV4-MVA" | "NFV4-MVAA"

Response Body

image/jpeg

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MVA/snapshot"
"string"

Event Streaming (WebSocket)

Visionaire4 mengirim setiap event hasil deteksi/inferensi melalui WebSocket. Untuk berlangganan event yang dihasilkan oleh pipeline Vehicle Analytics pada stream tertentu, buka koneksi WebSocket ke endpoint berikut:

ws://<host>:4004/event_channel/{node_num}/{stream_id}/NFV4-MVA

Setelah koneksi terbuka, server akan langsung mendorong (push) setiap event ke client tanpa perlu handshake atau pesan subscribe. Tutup koneksi untuk berhenti menerima event.

Parameter Path

ParameterTipeDeskripsi
node_numintegerNomor node tempat stream berjalan (0 = master)
stream_idstringID stream yang akan dipantau

Query Parameter (Opsional)

ParameterTipeDeskripsi
logicstringFilter event berdasarkan nama logic rule yang aktif pada pipeline. Tanpa parameter ini, semua event dari analitik akan dikirim.

Format Pesan

Setiap event yang diterima berbentuk JSON dengan struktur berikut:

{
  "event_id": "evt_123456",
  "stream_id": "<stream_id>",
  "analytic_id": "NFV4-MVA",
  "node_num": 0,
  "timestamp_ms": 1674123456789,
  "primary_text": "SUV",
  "secondary_text": "Northbound",
  "pipeline_data": {
    /* field spesifik module — lihat "Output yang Dihasilkan" pada index.mdx */
  },
  "image_jpeg": "base64-encoded JPEG..."
}

Detail field pipeline_data untuk Vehicle Analytics dijelaskan pada Output yang Dihasilkan di halaman utama.

Contoh Koneksi

const ws = new WebSocket(
  'ws://localhost:4004/event_channel/0/<stream_id>/NFV4-MVA'
);

ws.onmessage = (msg) => {
  const event = JSON.parse(msg.data);
  console.log(event.primary_text, event.pipeline_data);
};

ws.onerror = (err) => console.error('WebSocket error', err);
ws.onclose = () => console.log('Disconnected');
import asyncio
import json
import websockets

async def listen():
    url = "ws://localhost:4004/event_channel/0/<stream_id>/NFV4-MVA"
    async with websockets.connect(url) as ws:
        async for msg in ws:
            event = json.loads(msg)
            print(event["primary_text"], event["pipeline_data"])

asyncio.run(listen())

Filter Berdasarkan Logic

Jika pipeline menjalankan beberapa logic rule (misalnya line-counting, ROI density), Anda dapat memfilter event hanya untuk satu logic dengan menambahkan query parameter:

ws://<host>:4004/event_channel/{node_num}/{stream_id}/NFV4-MVA?logic=<logic_name>

Endpoint Channel Lainnya

Untuk mendengarkan event yang lebih luas (lintas analitik atau lintas stream), gunakan endpoint berikut yang dijelaskan pada Developer Guide:

EndpointCakupan
WS /event_channel/Semua event dari seluruh node
WS /event_channel/{node_num}/Semua event dari satu node
WS /event_channel/{node_num}/{stream_id}Semua event dari satu stream (semua analitik)

On this page