---
tags: mPOS, maintenance, troubleshoot
---
# Store RPi Maintenance / Troubleshoot
[TOC]
# Quick diagnose (no SSH)
## 確認裝置有連上網: ping 裝置
- **ping RPi**
- `10.*.*.248`
- 10.2.219.248, 10.2.113.248...
- `10.*.*.245`
- 10.7.1.245, 10.6.5.245...
- **ping 發票印表機** `10.*.*.241`
## 確認 API Server 正常啟動
- 確認 API 正常啟動 並 連的到 SC
- `cURL` or **Postman** `GET <RPi IP>/mPOS/status`; 或直接browser打開網址: `result == 1`
```json
/* Status is OK if result == 1 */
{
"result": 1,
"message": "",
"returnList": {
"storeShortName": "內湖",
"creditPercent": 100,
"server": "0.2.2 210426-1047_f72051c",
"storeType": "2",
"storeTel": "0277203999",
"receiptMSG": null,
"storePrincipal": null,
"IP": null,
"DBtime": "MON 17 MAY 2021 09:47:33 AM CST",
"TKGUINo": "69568009",
"storeNo": "00705",
"passport": 1,
"storeName": "內湖訓練教室",
"addr": "內湖燦坤TEST"
}
}
```

- 確認 RPi 與 發票印表機 有連上: `PRN2.state == 2`
> Note: 非即時, 每分鐘從印表程式接收狀態
- `cURL` or **Postman** `GET <RPi IP>/mPOS/status/printer`
```json
/* Status is OK :
* result == 1 AND
* returnList.PRN<id>.state == 2 AND
* returnList.PRN<id>.status_text has "ONLINE"
*/
{
"result": 1,
"message": "",
"returnList": {
"PRN0": {
"id": "0", "vendor": null, "model": "RP700",
"state": 2,
"status_value": 0,
"status_text": "ONLINE",
"timestamp": 1621321578805
},
"PRN2": {
"id": "2", "vendor": "Partner", "model": "RP700",
"state": 2,
"status_value": 2,
"status_text": "ONLINE|DRAWER",
"timestamp": 1621321578805
}
}
}
```
## Logs
`https://<RPi IP>/logs`
:::info
可從 dashboard

:::

---
# Troubleshoot (Remote SSH)
## SSH RPi access
:::spoiler login info
- id: `pi`
- pwd: `tk3cmp0s`
:::
## Tomcat / API Server 檢查
- API status (SC DB query store info)
```bash
curl localhost:8080/mPOS/status | jq
```
-
```json
{
"result": 1,
"message": "",
"returnList": {
"storeShortName": "內湖",
"creditPercent": 100,
"server": "0.2.2 210426-1047_f72051c",
"storeType": "2",
"storeTel": "0277203999",
"receiptMSG": null,
"storePrincipal": null,
"IP": null,
"DBtime": "MON 17 MAY 2021 09:47:33 AM CST",
"TKGUINo": "69568009",
"storeNo": "00705",
"passport": 1,
"storeName": "內湖訓練教室",
"addr": "內湖燦坤TEST"
}
}
```
- API server ping (純測試 API Server, 不 query SC)
```bash
curl localhost:8080/mPOS/status/ping | jq
```
-
```json
{
"result": 1,
"message": "OK"
}
```
## 發票印表機 檢查
- ping 發票印表機
- `192.168.1.251`
- `10.*.*.241`
- 確認 印表程式服務是否正常運行 ([參: Services](#Services))
```bash
systemctl status pos-print
```

若出現 沒有正常運行: `failed`, `inactive` 則重啟服務:
```bash
sudo systemctl restart pos-print
```
- 確認 RPi 與 發票印表機 有連上: `PRN2.state == 2`
> Note: 非即時, 被動式 每分鐘從印表程式接收狀態
```bash
curl localhost:8080/mPOS/status/printer | jq
```
```json
{
"result": 1,
"message": "",
"returnList": {
"PRN0": {
"id": "0", "vendor": null, "model": "RP700",
"state": 2,
"status_value": 0,
"status_text": "ONLINE",
"timestamp": 1621321578805
},
"PRN2": {
"id": "2", "vendor": "Partner", "model": "RP700",
"state": 2,
"status_value": 2,
"status_text": "ONLINE|DRAWER",
"timestamp": 1621321578805
}
}
}
```
## Logs
- tomcat (API Server)
```
/opt/tomcat/latest/logs/catalina.*
```
- TK3CPOSPrint (發票印表程式)
```
/opt/tk3c/logs/TK3CPOSPrint.log*
/opt/tk3c/logs/TK3CPOSPrint.error.log
```
- poskeeper ()
```
/opt/tk3c/logs/poskeeper.log*
/opt/tk3c/logs/poskeeper.error.log*
```
- nginx
```
/var/log/nginx/access.log*
```
- mosquitto (MQTT broker)
```
/var/log/mosquitto/mosquitto.log*
```
## Services
### Service list
- **nginx**
- `nginx.service`
- **tomcat (API Server)**
- `tomcat.service`
- **mosquitto (MQTT Broker)**
- `mosquitto.service`
- **pos-print (發票印表程式)**
- `pos-print.service`
- **pos-keeper**
- `pos-keeper.service`
- **pos-cleanup (Daily cleanup script)**
- `pos-cleanup.timer`
- `pos-cleanup.service`
- ~~**pos-pickup_activities (即時發佈 activity log)**~~ (20210930 Removed)
~~- `pos-pickup_activities.service`~~
### Check service status
- with `grep`
```bash
sudo systemctl -all | grep -E "(nginx|mosquitto|tomcat|pos-print|pos-pickup_activities|pos-keeper|pos-clean)"
```
- with `awk`
```bash
sudo systemctl -all | awk '/(nginx|mosquitto|tomcat|pos-print|pos-pickup_activities|pos-keeper|pos-clean)/{ printf "%-30s%-9s%-9s%-9s%s\n",$1,$2,$3,$4,(substr($0, index($0, $5))) }'
```
Output:
```
mosquitto.service loaded active running Mosquitto MQTT v3.1/v3.1.1 Broker
nginx.service loaded active running A high performance web server and a reverse proxy server
pos-cleanup.service loaded inactive dead mPOS server cleanup
pos-keeper.service loaded active running mPOS Keeper
pos-print.service loaded active running mPOS Printing
tomcat.service loaded active running TomEE Plus
pos-cleanup.timer loaded active waiting mPOS server cleanup
```
- detailed
```bash
systemctl status tomcat.service nginx.service pos-print.service mosquitto.service pos-pickup_activities.service pos-cleanup.timer --lines=0
```
<div style="margin: 0 -50px">

</div>
### 手動重啟 failed service
```bash
sudo systemctl restart nginx.service
```
```bash
sudo systemctl restart mosquitto.service
```
```bash
sudo systemctl restart pos-print.service
```
```bash
sudo systemctl restart tomcat.service
```
```bash
sudo systemctl restart pos-pickup_activities.service
```
```bash
sudo systemctl restart pos-keeper.service
```
---
# Troubleshoot (Using mpos_tool.py)
script file location: `10.1.62.97:/home/tk3c/`
files:
- mpos_tool.py
- storelist
- deployment_version.ini
usage:
```shell
./mpos_tool.py --help
```
```shell
./mpos_tool.py <command> --help
```
```shell
./mpos_tool.py <command> [--only STORE_NO/IP] [--include STORE_NO/IP] [--exclude STORE_NO/IP]
```
commands:
- `apistatus` - check api status, remote execute `curl localhost:8080/mPOS/status`
- `rprinter` - check receipt printer status, `curl localhost:8080/mPOS/status/printer`
- `apilog` - check tomcat log
- `service`- performs {start, stop, restart} on systemd service
- `service-summary`- shows status of systemd services
- `jmaptomcat` - shows current tomcat memory usage
- `clearcache` - clear tomcat jcache
- `apiver` - shows current api version
- `deploy` (CAUTIOUS) - remote deploy tomcat war
optional arguments:
- `-h`, `--help` - show command help
- `--only`, `--include`, `--exclude` - filter storeno or ip
- example
- `./mpos_tool.py apistatus --only 219`
- `./mpos_tool.py apistatus --only 219,228`
- `./mpos_tool.py apistatus --exclude 705`
- `./mpos_tool.py apistatus --include 10.1.62.97`
## Tomcat / API Server 檢查
commands:
- `./mpos_tool.py apistatus`
- `./mpos_tool.py apilog <day_offset=1>`
- `./mpos_tool.py service status tomcat`
### apistatus
```bash
./mpos_tool.py apistatus --only 219
```

### apilog
```bash
./mpos_tool.py apilog 2 --only 219
```

### service status
```bash
./mpos_tool.py service status tomcat --only 219
```

## 發票印表機 檢查
commands:
- `./mpos_tool.py rprinter`
- `./mpos_tool.py service status pos-print`
### rprinter
```bash
./mpos_tool.py rprinter --only 219,598
```

### service status
```bash
./mpos_tool.py service status pos-print --only 219
```

## Service
commands:
- `./mpos_tool.py service status <service(s)>`
- `./mpos_tool.py service start <service(s)>`
- `./mpos_tool.py service stop <service(s)>`
- `./mpos_tool.py service restart <service(s)>`
- `./mpos_tool.py service-summary`
service list:
```javascript
[
tomcat,
pos-print,
nginx,
mosquitto,
pos-cleanup,
pos-keeper,
pos-pickup_activites
]
```
### service status
```bash
./mpos_tool.py service status tomcat pos-print --only 219
```

### service restart
```bash
./mpos_tool.py service restart tomcat --only 10.1.62.132
```

### service-summary
```bash
./mpos_tool.py service-summary --exclude 705
```

# MISC
## speculation of RP-700(receipt printer) is unabled to reconnect without rebooting RP-700
<div style="margin: 0 -50px">

</div>