MQTT_SCHEMA VISION - zero1ne-26/doc GitHub Wiki
Vision MQTT μ€ν€λ§
κ°μ
| νλͺ© | λ΄μ© |
|---|---|
| μμ± μ£Όμ²΄ | Vision ν |
| μ΅μ’ μμ μΌ | 2026-10-04 |
| μμ λ΄μ© | μ€λΉλ¬Ό μ±κΈ°κΈ° μͺ½ λΌλ²¨ μμ |
ν ν½ λͺ©λ‘
| κ΅¬λΆ | Topic (λ°λ‘κ°κΈ°) | λ°©ν₯ | μ€λͺ |
|---|---|---|---|
| REQUEST | server/session/start |
μλ² β Vision | μΈμ (νλ₯΄μλ)μ΄ μμλμμ μλ¦Ό |
| REQUEST | server/session/end |
μλ² β Vision | μΈμ (νλ₯΄μλ)μ΄ λλ¬μμ μλ¦Ό |
| RESPONSE | cctv/person/zone |
Vision β μλ² | νμ¬ μΆμ μ€μΈ μ¬λμ΄ μμΉν zone |
| RESPONSE | cctv/person/emotion |
Vision β μλ² | νμ¬ μΆμ μ€μΈ μ¬λμ νμ μΈμ κ²°κ³Ό |
| RESPONSE | vision/position/spot |
Vision β μλ² | νμ¬ μΆμ μ€μΈ Spot μ μμΉ |
| RESPONSE | cctv/person/profile |
Vision β μλ² | νμ¬ μΆμ μ€μΈ μ¬λμ μΈν μ€λͺ (μΈμ λΉ 1ν) |
| RESPONSE | cctv/item/state |
Vision β μλ² | CCTV λ΄ λ―Έλ¦¬ μ€μ λ μμλ΄ λ¬Όκ±΄μ μμΉ μ¬λΆ μν (μ΄λΉ 1ν) |
| REQUEST | server/pokemon/start |
μλ² β Vision | ν΄λΉ ν¬μΌλͺ¬μ ν¬ν νμ μ μμνλΌλ μλ¦Ό |
| REQUEST | server/trash/start |
μλ² β Vision | μ°λ κΈ°μ νλ‘κΉ νμ μ μμνλΌλ μλ¦Ό |
| RESPONSE | cctv/pokemon/complete |
Vision β μλ² | ν΄λΉ ν¬μΌλͺ¬ ν¬ν μλ£ |
| RESPONSE | cctv/trash/complete |
Vision β μλ² | νλ‘κΉ (μ°λ κΈ° μ€κΈ°) μλ£ |
| RESPONSE | cctv/person/action |
Vision β μλ² | νμ¬ μΆμ μ€μΈ μ¬λμ λμ λΌλ²¨ (λμμ΄ λ°λ λ) |
SERVER -> VISION
Topic: server/session/start
λ°©λ¬Έκ°μ΄ μμ μ₯μμμ νλ₯΄μλλ₯Ό μμνλ©΄, λ°±μλκ° session_idλ₯Ό Visionμ 보λ΄μ€λλ€.
Payload
{
"session_id": "string" // μ€μΌμ€νΈλ μ΄μ
μλ² λ°κΈκ°
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μ€μΌμ€νΈλ μ΄μ μλ²μμ λ°κΈνλ μΈμ μλ³μ |
μμ
{
"session_id": "abc123"
}
Topic: server/session/end
λ°©λ¬Έκ°μ 체νμ΄ λͺ¨λ λλλ©΄, λ°±μλκ° session_idλ₯Ό Visionμ 보λ΄μ€λλ€.
Payload
{
"session_id": "string" // μ€μΌμ€νΈλ μ΄μ
μλ² λ°κΈκ°
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μ€μΌμ€νΈλ μ΄μ μλ²μμ λ°κΈνλ μΈμ μλ³μ |
μμ
{
"session_id": "abc123"
}
VISION -> SERVER
Topic: cctv/person/zone
μΈμ μ μ£Όμ²΄κ° μμΉν zoneμ λ°νν©λλ€.
Payload
{
"session_id": "abc123",
"zone_id": "home"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
zone_id |
string | Y | νμ¬ μμΉν zone. μ΄λ zone μλ μνμ§ μμΌλ©΄ none |
μλ²κ° μμλ¬μΌ νλ λΆλΆ
- μμΉ λ³κ²½μ΄ μμ μμλ§ λ°νλ©λλ€.
- λ±λ‘λ μ¬λμ΄ νλ μμμ μ¬λΌμ‘λ€κ° λ€λ₯Έ zone μμ λ€μ μ‘νλ©΄ κ·Έλ μ zone μ΄ λ°νλ©λλ€.
- μΈμ
μ΄ λ°λλ©΄ μ΄μ μΈμ
μ zone κ³Ό κ°λλΌλ μ
session_idλ‘ λ€μ λ°νλ©λλ€.
Topic: cctv/person/emotion
μΈμ μ 주체(νλ₯΄μλλ₯Ό μμν μ¬λ)μ νμ μ΄ λ°λ λλ§ λ°νν©λλ€. λ΄λΆμ μΌλ‘ 0.5μ΄λ§λ€ νμ ν©λλ€. νμ λ³κ²½ μμλ§ λ°νλ©λλ€.
Payload
{
"session_id": "abc123",
"timestamp": 1690000000.123,
"emotion": "joy"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
timestamp |
number | Y | Unix epoch μ΄ (μμμ ν¬ν¨) |
emotion |
string | Y | μΈμλ νμ (joy, surprise, neutral, anger) |
| κ° | μλ―Έ |
|---|---|
joy |
κΈ°μ¨ |
surprise |
λλ |
neutral |
μ€λ¦½ |
anger |
νλ¨ |
μλ²κ° μμλ¬μΌ νλ λΆλΆ
- νμ μ λ³κ²½μ΄ μμ μμλ§ λ°νλ©λλ€.
- μΌκ΅΄μ΄ μ‘νμ§ μμΌλ©΄ λ°νλμ§ μμ΅λλ€.
Topic: vision/position/spot
Spotμ μμΉλ₯Ό λ°νν©λλ€. (1μ΄ μ£ΌκΈ°)
Payload
{
"session_id": "abc123",
"timestamp": 1690000000.123,
"x": 100.0,
"y": 100.0,
"zone_id": "home"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ
id. μ΄λ¦° μΈμ
μ΄ μμΌλ©΄ "none" |
timestamp |
number | Y | Unix epoch μ΄ (μμμ ν¬ν¨) |
x |
number | Y | μλ μ’ν X (cm) |
y |
number | Y | μλ μ’ν Y (cm) |
zone_id |
string | Y | νμ¬ μμΉν zone. μ΄λ zoneμλ μμΌλ©΄ "none" |
μλ² μ²λ¦¬
- μλ²λ μ΄ ν ν½μ ꡬλ
ν΄
zone_idλ₯Ό λ°±μ€νΌμ€ μ₯μ(locations.zone_id)λ‘ λ§€νν λ€orchestration/{sessionId}/spot/position(retained)μΌλ‘ μ¬λ°ννλ€. μμΈν λ΄μ©μ MQTT_SCHEMA-ORCHESTRATION_SERVER Β§20 μ°Έκ³ .
μ’νκ³
μ¬λ μμΉ, μ€ν μμΉΒ·λ°©ν₯, zoneμ λͺ¨λ κ°μ μλ μ’νκ³λ₯Ό 곡μ
| νλͺ© | μ μ |
|---|---|
| μμ (0, 0) | 체ν μμ μ§μ (λ³λ κ°λ₯μ± μμ) |
| λ¨μ | cm. [x, y] = [100, 50] μ΄λ©΄ μμ μμ xλ°©ν₯ 1m, yλ°©ν₯ 0.5m μ§μ |
| μΆ | λ°λ₯ νλ©΄μ x, y λ μΆ. λ°©ν₯μ μΊλ¦¬λΈλ μ΄μ μ μμ λ§μ»€μ μΆμΌλ‘ μ μ (μ μμ₯ λ²½κ³Ό μ νν νννμ§ μμ μ μμ) |
| μΉ΄λ©λΌ | μ²μ₯ μΉ΄λ©λΌ 4λ(51/52/53/54)λ₯Ό κ³΅ν΅ μΊλ¦¬λΈλ μ΄μ β λͺ¨λ μΉ΄λ©λΌκ° κ°μ μ’νκ³ κ³΅μ |
μ°Έκ³
- λ§΅ μ΄λ―Έμ§μ μ°μΌλ €λ©΄ "μλ cm β λ§΅ ν½μ " λ³νμ΄ νμν κ² κ°μ΅λλ€.
- κ° zoneμ΄ μ΄λ μ’νμ μμΉν΄ μλμ§λ νμνμ€ κ² κ°μλ°μ. https://github.com/zero1ne-26/doc/wiki/λ°λ₯μ’νκ³ λ₯Ό λ΄μ£Όμλ©΄ λ κ² κ°μ΅λλ€.
Zone μ μ
μ μμ₯ λ΄ 5κ° κ΅¬μ μ μ
| zone_id | μ₯μ |
|---|---|
vehicle |
μ°¨λ |
park |
곡μ |
home |
μ§ |
mart |
λ§νΈ |
- μ΄λ zone μλ μνμ§ μμΌλ©΄
zone_idλnoneμΌλ‘ λκ°λλ€.
Topic: cctv/person/profile
μΈμ μ 주체μ κ²λͺ¨μ΅μ VLM μ΄ μ€κΈλ‘ μ€λͺ ν΄ λ°νν©λλ€. μΈμ λΉ ν λ² λ°νλ©λλ€.
Payload
{
"session_id": "abc123",
"description": "20λ μ΄λ°μΌλ‘ 보μ΄λ μ¬μ±μΌλ‘, κ²μ 머리λ₯Ό λ€λ‘ λ¬Άμλ€. ν°μ νλν°μ κ²μμ λ°μ§, ν°μκ³Ό κ²μμμ΄ μμΈ μ΄λνλ₯Ό μ μλ€. μκ²½μ΄λ λͺ¨μλ μ°μ§ μμκ³ κ°λ°©μ μλ€."
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
description |
string | Y | μΈν μ€λͺ |
QoS / κΈ°ν μ€μ
| νλͺ© | λ΄μ© |
|---|---|
| QoS | 1 |
| Retain | false |
| κΈ°ν |
Item find
find specific item in cctv using trained network.
Topic: cctv/item/state
cctvλ‘ home table μ μλ 물건μ μλ³νκ³ , μμ λ°μ μλμ§ νμΈν©λλ€.
Payload
{
"I1": 1,
"I2": 1,
"I3": 1,
"I4": 1,
"I5": 1,
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
I1 |
char | Y | item 1 states, 0x01 in zone, 0x02 out of zone, 0x03 Null |
I2 |
char | Y | item 2 states, 0x01 in zone, 0x02 out of zone, 0x03 Null |
I3 |
char | Y | item 3 states, 0x01 in zone, 0x02 out of zone, 0x03 Null |
I4 |
char | Y | item 4 states, 0x01 in zone, 0x02 out of zone, 0x03 Null |
I5 |
char | Y | item 5 states, 0x01 in zone, 0x02 out of zone, 0x03 Null |
- item 1 : λμλ½ν΅
- item 2 : λ ΈνΈ
- item 3 : νμ°μΉ
- item 4 : μ μΉμκ°λ°©
- item 5 : ν λΈλ¬
곡μ λ―Έμ (ν¬μΌλͺ¬ ν¬ν / νλ‘κΉ )
곡μμ ν¬μΌλͺ¬ μΈν 3μ’
κ³Ό μ°λ κΈ°λ κ°κ° 미리 κ·Έλ €λ ꡬμ(zone)μ κ°μ΅λλ€.
start λ₯Ό λ³΄λΈ λ¬Όκ±΄λ§ νλ¨νλ©°, λ―Έμ
μ μλ£νλ©΄ complete λ₯Ό λ°νν©λλ€.
Topic: server/pokemon/start
ν΄λΉ ν¬μΌλͺ¬μ ν¬ν λ―Έμ μ μμν©λλ€.
Payload
{
"session_id": "abc123",
"pokemon": "psyduck"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
pokemon |
string | Y | ν¬νν ν¬μΌλͺ¬ (psyduck, wobbuffet, exeggutor) |
| κ° | μλ―Έ |
|---|---|
psyduck |
κ³ λΌνλ |
wobbuffet |
λ§μμ© |
exeggutor |
λμ |
Topic: server/trash/start
μ°λ κΈ°μ νλ‘κΉ λ―Έμ μ μμν©λλ€.
Payload
{
"session_id": "abc123"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
Topic: cctv/pokemon/complete
ν¬μΌλͺ¬μ ν¬ννμ¬ λ―Έμ μ μλ£νλ©΄ λ°νλ©λλ€.
Payload
{
"session_id": "abc123",
"pokemon": "psyduck"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
pokemon |
string | Y | ν¬νλ ν¬μΌλͺ¬ (psyduck, wobbuffet, exeggutor) |
Topic: cctv/trash/complete
μ°λ κΈ°λ₯Ό μ£Όμ νλ‘κΉ μ μλ£νλ©΄ λ°νλ©λλ€.
Payload
{
"session_id": "abc123"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
μ°Έκ³
vision νμμ λ³΄κ³ μλ λΉμ μ© λμ보λκ° λ°λ‘ μλλ°μ. κ·Έμͺ½μμλ μλ λ©νΈλ₯Ό μ¬μ©νκ³ μμ΅λλ€. κ·Έλ₯ μ°Έκ³ λ§ ν΄μ£ΌμΈμ!
| λμ | start | complete |
|---|---|---|
psyduck |
μ£Όλ³μ λ Έλμ μ€λ¦¬ ν¬μΌλͺ¬μΈ κ³ λΌνλμ΄ μΆλͺ°νλ€! | μ λλ€-! κ³ λΌνλμ λΆμ‘μλ€! |
wobbuffet |
μ£Όλ³μ νλμ μλλ°± ν¬μΌλͺ¬μΈ λ§μμ©μ΄ μΆλͺ°νλ€! | μ λλ€-! λ§μμ©μ λΆμ‘μλ€! |
exeggutor |
μ£Όλ³μ μΌμμ ν¬μΌλͺ¬μΈ λμκ° μΆλͺ°νλ€! | μ λλ€-! λμλ₯Ό λΆμ‘μλ€! |
| μ°λ κΈ° | μ£Όλ³μ μ°λ κΈ°κ° μμ΅λλ€. νλ‘κΉ νλμ νλ©΄μ 체λ ₯μ κΈΈλ¬λ΄ μλ€! | μ°λ κΈ°λ₯Ό μ£Όμ λ€! 건κ°λ μ±κΈ°κ³ νκ²½λ μ±κΈ°κ³ ! |
Topic: cctv/person/action
μ¬λμ actionμ μ€μκ°μΌλ‘ κ°μ§ν©λλ€.
Payload
{
"session_id": "abc123",
"action_label": "squat down"
}
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
session_id |
string | Y | μΈμ id |
action_label |
string | Y | νλ λΌλ²¨ |
μλ² μΈ‘ ν΄μ (2026-09-19) β Visionμ κ°μ§ν λμ 1κ±΄λ§ λ°ννκ³ , νμ€ν¬ μλ£ νμ μλ κ΄μ¬νμ§ μλλ€. μ€μΌμ€νΈλ μ΄μ μλ²λ
type='person_action'νμ€ν¬μ λ§€νλaction_labels[]λ₯Ό AND 쑰건μΌλ‘ λ³Έλ€ β λ°°μ΄μ λμμ μ λΆ λ¬μ±ν΄μΌ νμ€ν¬κ° μλ£λλ€(μμ 무κ΄, λ¬μ±λΆμ μ μ§). λ¬μ±/λ―Έλ¬μ± νν©μ μλ²κ° νλΈλ¦Ώμtasks[].action_progress.{cleared,remaining}μΌλ‘ λ΄λ €λ³΄λΈλ€.λμ°© μ§ν 무μ κ΅¬κ° (2026-09-20) β μλ²λ μΈμ μ΄ κ·Έ νμ€ν¬μ μ₯μμ λμ°©ν μκ°μ κΈ°μ€μΌλ‘,
app_settings.person_action_arrival_delay_seconds(κΈ°λ³Έ 5μ΄)κ° μ§λκΈ° μ μ μμ νcctv/person/actionμ 무μνλ€. λμ°© μ§ν μΉ΄λ©λΌ νλ μμ΄ μμ νλκΈ° μ μ€νμΌλ‘ νμ€ν¬κ° λ‘λ© μ€μΈλ°λ μλ£λ κ²μ²λΌ 보μ΄λ λ¬Έμ λ₯Ό λ§κΈ° μν¨ β Vision μͺ½ λ°ν λ‘μ§ λ³κ²½μ νμ μλ€.μμΈν λ΄μ©μ μ€μΌμ€νΈλ μ΄μ μλ² μ€ν€λ§λ₯Ό μ°Έκ³ .
action label μ’ λ₯
μ ν¬ νλ‘μ νΈμμ λμ¬ μ μλ λΌλ²¨λ€μ λλ€. μλ λΌλ²¨λ€ μΈμ actionμ κ²μΆλμ§ μμ΅λλ€! νλμ΄ λ³κ²½λμμ μμλ§ λ°νλ©λλ€.
| action label | λμ μ€λͺ | μ¬μ©λ λ°μ΄ν° |
|---|---|---|
sitting down |
μ μλ€κ° μλ λμ | NTU60 |
standing up (from sitting position) |
μμ μλ€κ° μΌμ΄μλ λμ | NTU60 |
squat down |
μ€μΏΌνΈμ²λΌ 무λ¦μ κ΅½ν μͺΌκ·Έλ € μλ λμ | NTU120 |
jump up |
μ μ리μμ μλ‘ μ ν | NTU60 |
hopping (one foot jumping) |
ν λ°λ‘ ν΄μ§ν΄μ§ λ°κΈ° | NTU60 |
running on the spot |
μ μ리 λ°κΈ° | NTU120 |
side kick |
μμΌλ‘ λ°μ°¨κΈ° | NTU120 |
kicking something |
μμΌλ‘ λ°λ‘ μ°¨λ λμ | NTU60 |
hand waving |
μμ μ’μ°λ‘ νλ€μ΄ μΈμ¬ | NTU60 |
cheer up |
λ νμ μλ‘ λ€κΈ° | NTU60 |
put the palms together |
λ μλ°λ₯μ κ°μ΄ μμ λͺ¨μ (ν©μ₯) | NTU60 |
cross arms |
νμ§± λΌκΈ° | NTU120 |
arm circles |
νμ ν¬κ² μμΌλ‘ λ리기 | NTU120 |
arm swings |
νμ μλ€λ‘ νλ€κΈ° | NTU120 |
stretch oneself |
κΈ°μ§κ° μΌκΈ° | NTU120 |
touch head (headache) |
머리λ₯Ό μμΌλ‘ μ§μ (λν΅) | NTU60 |
touch neck (neckache) |
λͺ©μ μμΌλ‘ μ§μ (λͺ© κ²°λ¦Ό) | NTU60 |