---
tags: 'Acer'
---
電動捲軸通訊協定
========
[TOC]
### 資料流架構圖

### MQTT Flow
#### 向中央伺服器註冊
中央伺服器的功能為流量配度中心,會依照使用者的座標位置以及 QR Code 的內文,分配對應的資料伺服器給裝置端或是手機端,此目的為二:
1. 資料流分流
2. 當有資料伺服器癱瘓時,可以做動態分配救援
#### 資料伺服器
考量未來使用者廣及全球,無論是基於伺服器的負載考量或是距離產生的延遲考量,分散式的架構才能方便藉由 AWS 廣布的伺服器來完成全球服務佈建。
裝置端或使用者手機端,在向中央伺服器取得該裝置的資料伺服器後,即會轉向透過資料伺服器來溝通。
#### 註冊流程
1. 裝置端或手機端對中央伺服器發送註冊指令:
TOPIC: /eScreen/host/register
Payload:
```
{
"id": IDAM_id or mobile_id,
"GPS": [23.xxx,121.xxx], // 如為 IDAM 端可以為空陣列 []
}
```
2. 伺服器端回覆指令:
TOPIC: /eScreen/uuid/registerAck
此 uuid 為 IDAM_id or mobile_id
```
{
dataServer: 'xxx.xxx.xxx.xxx',
dataServerPort: xxxx ,
}
```
3. 此命令為裝置端每次啟動以及網路斷線後,必須重新執行的流程,
如遇到無法與中央伺服器連線的狀況,則一直重複嘗試連線.
#### 資料傳輸
##### 取得使用者資訊
Command:
TOPIC: /eScreen/host/userSignIn
Payload:
```
{
"id": mobile_id
}
```
Ack:
TOPIC: /eScreen/uuid/userSignInAck
Payload:
```
{
"id": mobile_id,
"IDAM": [
{
"id" : "idamId_e6c78aca68717",
"windows" :
[
{
"id" : "windowId_b6badf1edba48",
"status" : "close"
}
],
}
]
```
##### 更新使用者訊息
Command:
TOPIC: /eScreen/host/updateUserInfo
Payload:
```
{
"id": mobile_id,
"IDAM": [
{
"id" : "idamId_e6c78aca68717",
"windows" :
[
{
"id" : "windowId_b6badf1edba48",
"status" : "close"
}
],
}
]
}
```
Ack:
TOPIC: /eScreen/uuid/updateUserInfoAck
Payload:
```
{
"status": 'OK'
}
```
##### 取得裝置狀態
Command:
TOPIC: /eScreen/host/deviceSignIn
Payload:
```
{
"id": IDAM_id
}
```
Ack:
TOPIC: /eScreen/uuid/deviceSignInAck
Payload:
```
{
"id" : "idamId_e6c78aca68717",
"windows" :
[
{
"id" : "windowId_b6badf1edba48",
"status" : "off"
}
],
}
```
##### 更新裝置狀態
Command:
TOPIC: /eScreen/host/updateDeviceInfo
Payload:
```
{
"id" : "idamId_e6c78aca68717",
"windows" :
[
{
"id" : "windowId_b6badf1edba48",
"status" : "on"
}
],
}
```
Ack:
TOPIC: /eScreen/uuid/updateDeviceInfoAck
Payload:
```
{
"status": 'OK'
}
```
#### 裝置端與伺服器端的帳號以及 payload 加密
裝置端使用 MQTT 但需帳號密碼,所有內文需經加密才能傳輸
#### 手機端與伺服器端的通訊加密
手機與伺服器端全程使用 wss ( MQTT over websockets with TLS )通訊.
#### 手機端與裝置端與捲軸 uuid 規則
* 手機端: Android 內建之 uuid
* 裝置端: 'IDAM_' + 16 位元的亂數 hex string
* 捲軸端: 'windows_'+ 16 位元的亂數 hex string