---
# System prepended metadata

title: DC/DMS/API GW Introduction
tags: [legacy system]

---

###### tags: `legacy system`

# DC/DMS/API GW Introduction

### Architecture
![](https://i.imgur.com/V4TmsDE.png)

### DC
- MQTT Client
- Foward message to DMS via ZMQ (as client)

### DMS
- ZMQ Server/Client
    - Sever receive message from DC
    - Client transmit message to Alerto
- Core system
    - Message server
        - dmServer.js
            - initHttpServer() 
                - 建立ZMQ socket, 並監聽從DC來的訊息
                - 根據訊息內容丟到對應的deviceManager (dmBase, dmVm) // one instance per imei
    - Trip business logical (-> Tripo)
        - dmBase.js // prototype
            - processingEvent() // 當parseRawDataFlow()結束後, 會呼叫這個function, 根據report更新對應的資訊至vehicle_status
            - processing2ndLevelEvent() // 這邊主要是決定要不要create trip point, simple trip point, gps point, 以及要不要更新vehicle_status (比較像是準備寫入資料進DB的function)
        - dmVm.js // 解析的部分寫在這支js
            - parseRawDataFlow() // convert raw data -> this.obd_data via binary parser
        - dmEventHandler/
            - eventProcess // 當收到raw data時會以這邊為進入點
            - updateCurrentVehicleStatus.js
            - createTripPoint.js // 之前是在這邊加入Driver record相關的數據
            - createSimpleTripPoint.js
            - createTriRecord.js
    - Driver business logical (-> Drivo)
- Relative collection
    - vehicle-status // 即時資訊
        - score的部分在thisTrip.safetyScore, thisTrip.ecoScore
    - trip-point // 跟旅程有關
        - score的部分在thisTrip.safetyScore, thisTrip.ecoScore
    - simple-trip-point  // 跟旅程有關
    - gps-point // 跟旅程有關
    - driver_recrods // Driver的紀錄
        - 這邊其實是直接copy trip point而已 
    - driver_obd2_pair // Driver - OBD的綁定關係

### API GW
- Driver APIS
    - driver.js // list, daily, weekly, monthly
    - driverobd2.js // pairing

### System setup
- Install [ZMQ](https://github.com/zeromq/libzmq)
- Clone DC (branch: develop)
- Change default config setting
    - MQTT broker dev.mqtt.roadmio.com
    - DB 這邊請用local的 (不然會寫兩份資料)
- Launch DC with command:
```
pm2 start pm2.json
```
- Clone DMS (branch: 2.x develop)
- Change default config setting
    - DB 這邊請用local的 (不然會寫兩份資料)
- Launch DMS with command:
```
npm run localhost
```
- Clone API GW (branch: develop)
- Change default config setting
    - 確認DB address, 下面幾個屬性都是相關的 (如果要以現有的資料做測試, 可以連到Dev_DMS (34.254.100.199), 如果要用自己local的測試則改成自己的位址)
        - db 
        - sessions
        - logs

- Launch API GW with command:
```
npm run start
```
- Debug with command:
```
pm2 ls
pm2 log $appId (e.g., pm2 log 1)
```