# EdgeX Setting
## MQTT device service
### Topic Setting
```
root@pe100a: cd /etc/EdgeX/res/mqtt-device
root@pe100a: vim ./configuration.toml
---configuration.toml---
[MQTTBrokerInfo]
...
# Comment out/remove when using multi-level topics
IncomingTopic = "F0B5D1A49D180000/STREAMING" #default "IncomingTopic" EdgeX sub IncomingTopic 接收資料
ResponseTopic = "ResponseTopic" #EdgeX sub ResponseTopic 接收下完Command後的回傳的資料
```
* Command Topic
EdgeX Pub Command Topic 對 Sensor 下指令
* 設定方法有兩種
1.透過 UI :
EdgeX service開啟,透過瀏覽器輸入 `http://{PE100A IP}:4000/#/metadata/device-center/device-list`,勾選 device並且按下 "Edit"

PropertyValue:填入你要更改的Command(beandevice: {deviceid}/OTAC)

2.Confing.toml
```
root@pe100a: cd /etc/EdgeX/custom-config/devices
root@pe100a: vim ./my.custom.device.config.toml
---my.custom.device.config.toml---
# Pre-define Devices
[[DeviceList]]
Name = "my-custom-device"
ProfileName = "my-custom-device-profile"
Description = "MQTT device is created for test purpose"
Labels = [ "MQTT", "test" ]
[DeviceList.Protocols]
[DeviceList.Protocols.mqtt]
CommandTopic = "CommandTopic" #填入你要更改的Command(beandevice: {deviceid}/OTAC)
```
* 除了 UI , 只要有動到config檔,記得重啟service
```
root@pe100a: systemctl restart EdgeX
```
### IP Setting
* mqtt broker IP 依據 PE100A 的 Local IP
* pub sample code for python
```
import paho.mqtt.client as mqtt
import json
# 連線設定
# 初始化地端程式
client = mqtt.Client()
# 設定登入帳號密碼
#client.username_pw_set("try","xxxx")
# 設定連線資訊(IP, Port, 連線時間) 記得更改local ip
client.connect("192.168.1.101", 1883, 60)
payload = {'name' : "my-custom-device" , 'cmd' : "randnum" , 'randnum' : 1.2}
# #要發布的主題和內容
client.publish("IncomingTopic", json.dumps(payload))
```
* 若pub成功,可以在 UI 看到資料,點選 Events,進入後按下 "Start"

## Check docker ps
* 確認 EdgeX service 是否都有啟動,正確啟動如下:
```
root@pe100a: docker ps
```

* 若沒有出現,可能的問題:
* docker 沒有啟動 docker-compose: 啟動 service
`
root@pe100a: systemctl start EdgeX
`
`
root@pe100a: systemctl status EdgeX #確認是否有在 running
`
* docker container 沒有啟動: 查看 log
`
root@pe100a: docker ps -a #確認docker container 沒有啟動
`
`
root@pe100a: docker logs edgex-mqtt-broker(更換要查詢的container)
`
## Schedule
* 為了防止core data資料無限肥大,要在EdgeX設定排程固定時間清理資料
## SSH PE100A
* 目前 PE100A 都能透過 SSH remote
```
# ssh root@{PE100A IP}
密碼: asus
```
> [提供ssh 設定網址](https://serverpilot.io/docs/how-to-enable-ssh-password-authentication/)