# P5 顯示器 MQTT 通訊規格
## MQTT Broker
- version: v3.1.1 min
- security:
- username/password
- x509 certificate (optional)
### MQTT Topic format
```jsonld=
/{vendor}/{deviceId}/{direction}/{topic}/{subTopic}
```
|API |型別|描述 |範例 |Note|
|-----|----|-----|------|-----|
|{vendor}| string |廠商縮名|'chengwei'| 必要 |
|{deviceId}| string |設備 ID|'廠商前頭-wifi_mac_addr'| 必需為 uniqueId |
|{direction}| string |topic/payload 方向|'upstream' 'downstream' | 必要 |
|{topic}| string |MQTT話題|'topic'| 必要
|{subTopic} | string | Sub 話題 |'sub topic'| 非必要 (最多兩階) |
## MQTT Downstream Topics (後台: broker 對 設備: client)
### 事件新增 API
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/disp_event/add
```
#### payload
```jsonld=
[
{
eventId: "mhvXdrZT4jP5T8vBxuvm75",
event_line_1: "離床過久",
event_line_2: "王張阿明 302A",
priority: 1,
ring_tone: true
},
{
eventId: "P5T8vBxumhvXdrZT4jvm75",
event_line_1: "離床",
event_line_2: "林阿琳 401B",
priority: 0,
ring_tone: false
},
{
eventId: "rZT4jP5TmhvXd8vBxuvm75",
event_line_1: "久臥",
event_line_2: "陳啊勳 102D",
priority: 1,
ring_tone: false
}
]
```
#### priority logic
|high priority|low priority|
|--|--|
|1|0|
|插入下一個顯示輪巡|按照目前輪巡排列最後|
#### ring tone logic
|true|false|
|--|--|
|play ring tone | no ring tone|
### 事件刪除 API
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/disp_event/del
```
#### payload
```jsonld=
{
eventId: "mhvXdrZT4jP5T8vBxuvm75",
}
```
### 事件輪詢週期設定 API
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/disp_event/rotate
```
#### payload
```jsonld=
{
display_time: true // 輪巡末顯示萬年曆與否
period: 3000 // unit = milli-second
}
```
### 文宣 Notice 新增 API
> (6字2行)
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/disp_notice/add
```
#### payload
```jsonld=
{
notice_id: "jP5T8vBxuvm75mhvXdrZT4",
notice_line_1: "勤洗手保健康",
notice_line_2: "武肺嘸免驚驚",
}
```
### 文宣 Notice 刪除 API
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/disp_notice/del
```
#### payload
```jsonld=
{
notice_id: "jP5T8vBxuvm75mhvXdrZT4"
}
```
### 鈴聲時段音量設定 API
> Question: 請問一台可放多少 *.wav 檔? 如何更新 *.wav
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/config_ringtone
```
#### payload
```jsonld=
{
filename: "file_name.wav",
ring_setting: "/001-093-222"
}
```
### Group 設定 API
> 定義 p5 display 安裝空間位置
#### topic
```jsonld=
/chengwei/{deviceId}/downstream/config_group
```
#### payload
```jsonld=
{
floor: "1F",
group: "zone_1"
}
```
### WiFi 設定 API
#### topic
```jsonld=
TBD
```
#### payload
```jsonld=
{
ssid: "wifi_ssid",
password: "wifi_password"
}
```
-----
## MQTT Upstream Topics (設備: client -> 後台: broker)
|Topic|Format|描述|
|-----|-----|-----|
|'status'|JSON|定時回報設備狀態|
| |JSON|設定回覆結果|
### Display Status API
> 設備狀態定時回報後台 (Broker)
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/status
```
#### payload
```jsonld=
{
model: "chengwei_p5_display",
version: "vx.x", // firmware version
wifi: {
mac: "30AEA4E37424", // wifi mac
rssi: -51, // current wifi rssi
ssid: "jubo-lte", // wifi ssid
password: "1234567", // wifi password
},
time: 1665647853, // device time in unix timestamp
display_events: [ // event_ids displaying, 5 max.
"mhvXdrZT4jP5T8vBxuvm75", // shorten uuid
"73WakrfVbNJBaAmhQtEeDv"...],
display_notice: "jP5T8vBxuvm75mhvXdrZT4",
display_period: 3000, // 幕次輪巡時間間隔
display_time: true,
ringtone: {
filename: "file_name.wav",
ringtone_setting: "/001-093-222"
},
floor: "1F",
group: "zone_1",
}
```
### Event 設定回覆 API
> 事件顯示設定回報後台 (新增, 刪除, 和 輪巡時間)
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/disp_event
```
#### payload
```jsonld=
{
original_payload: {
...
}
success: false,
reason: "max. 5 events",
}
```
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/disp_event/rotate
```
#### payload
```jsonld=
{
success: false,
reason: "invalid_filename / invalid_period",
}
```
### 文宣 Notice 設定回覆 API
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/disp_notice/add
/chengwei/{deviceId}/upstream/disp_notice/del
```
#### payload
```jsonld=
{
eventId: "jP5T8vBxuvm75mhvXdrZT4", // shorten uuid
success: false,
reason: "too_many_characters / unknown_id",
}
```
### 鈴聲時段音量設定回覆 API
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/config_ringtone
```
#### payload
```jsonld=
{
filename: "file_name.wav",
ring_setting: "/001-093-222",
success: false,
reason: "invalid_format / unknown_file"
}
```
### Group 設定回覆 API
#### topic
```jsonld=
/chengwei/{deviceId}/upstream/config_group
```
#### payload
```jsonld=
{
floor: "1F",
group: "zone_1",
success: false,
reason: "name_too_long"
}
```
### WiFi 設定回覆 API
#### topic
```jsonld=
TBD
```
#### payload
```jsonld=
TBD
```