Skip to content

指令介面 (CLI)

概述

EasyAccess 2.0 提供的 ea20_cli.exe 可程式化控制 EasyAccess 2.0 的各項功能,進行自動化腳本操作:

  • 管理 HMI 連接、VPN、穿透配置,執行批次操作
  • 與其他工具(如 easydownload_cli)整合,實現遠端專案更新
  • 建立排程任務,實現自動化維護和監控

要求

  • 僅支援 Windows
  • 必須先啟動 EasyAccess 2.0 才能使用 ea20_cli.exe 控制
  • 必須在 EA2.0 應用程式設定中啟用 CLI 功能

安裝

ea20_cli.exe 會隨 EasyAccess 2.0 應用程式一起自動安裝。在安裝目錄中可以找到 EasyAccess 2.0.exeea20_cli.exe 兩個檔案。

啟用 CLI

打開 EasyAccess 2.0 應用程式設定,切換到一般,啟用 Enable CLI 選項。

alt text

命令參考

要檢視所有可用命令,請執行:

bash
ea20_cli.exe --help

可用命令:

命令說明
--show / --hide顯示或隱藏 EA2.0 應用程式視窗
--login <domain> <user> <password>
--login-saved
使用帳號密碼或已儲存的帳號密碼登入
--logout登出目前工作階段
--get-current-user取得目前登入使用者資訊
--get-hmi-list取得網域中所有 HMI 的清單
--get-hmi <hw_key>取得特定 HMI 的詳細資訊
--connect <hw_key>連線到 HMI 並建立 VPN
--disconnect <hw_key>中斷與 HMI 的連線
--set-hmi-passthrough <hw_key> <ip1> [ip2] ... [ip6]配置穿透 IP
--clear-hmi-passthrough <hw_key>清除所有穿透配置

安全提示

避免在腳本中使用明文密碼的 --login 命令。建議先在 EA2.0 應用程式中安全儲存帳號密碼,然後使用 --login-saved 命令。

輸出格式

ea20_cli.exe 根據命令使用兩種輸出格式:

簡單文字輸出

大多數命令回傳簡單文字回應:

  • 成功: success
  • 錯誤: error: <錯誤訊息>

範例:

text
success
error: login failed
error: timeout or EA2 CLI not enabled in app settings

JSON 輸出

回傳資料的命令使用 JSON 格式:

  • --get-current-user
  • --get-hmi-list
  • --get-hmi

JSON 結構(成功時):

json
{
  "success": true,
  "data": { ... }
}

TIP

當這些命令執行失敗時,會回傳簡單文字格式(如 error: <訊息>),而不是 JSON 格式。

退出碼

退出碼含義
0成功
-1逾時或未啟用 EA2 CLI
-2操作失敗(查看錯誤訊息了解詳情)

所有命令都回傳退出碼。以 --login-saved 為例:

batch
ea20_cli.exe --login-saved
if %ERRORLEVEL% NEQ 0 (
    echo Command failed with exit code: %ERRORLEVEL%
    exit /b 1
)
powershell
ea20_cli.exe --login-saved
if ($LASTEXITCODE -ne 0) {
    Write-Host "Command failed with exit code: $LASTEXITCODE"
    exit 1
}

使用範例

範例 1:使用已儲存的帳號密碼登入

python
import subprocess
import sys

result = subprocess.run(["ea20_cli.exe", "--login-saved"], capture_output=True, text=True)
if result.returncode != 0:
    print("Login failed")
    sys.exit(1)
print("Login succeeded")
powershell
ea20_cli.exe --login-saved
if ($LASTEXITCODE -ne 0) {
    Write-Host "Login failed"
    exit 1
}
Write-Host "Login succeeded"

範例 2:取得目前使用者資訊

CLI 輸出範例:

bash
ea20_cli.exe --get-current-user
json
{"data":{"domain":"TEST","username":"ADMIN"},"operation":"get_current_user","success":true}
python
import subprocess
import json

result = subprocess.run(["ea20_cli.exe", "--get-current-user"], capture_output=True, text=True)
if result.returncode == 0:
    user_info = json.loads(result.stdout)
    print(f"Domain: {user_info['data']['domain']}")
    print(f"Username: {user_info['data']['username']}")
    # Output:
    # Domain: TEST
    # Username: ADMIN
powershell
$result = ea20_cli.exe --get-current-user | ConvertFrom-Json
Write-Host "Domain: $($result.data.domain)"
Write-Host "Username: $($result.data.username)"
# Output:
# Domain: TEST
# Username: ADMIN

範例 3:列出所有 HMI

CLI 輸出範例:

bash
ea20_cli.exe --get-hmi-list
json
{
  "success": true,
  "operation": "get_hmi_list",
  "data": [
    {"hw_key": "ABCD1234EFGH5678IJKL9012MNOP3456", "is_online": true, "name": "cMT-ABCD", "nickname": "HMI1", "vpn_ip": "", "vpn_state": "disconnected", "vpn_type": ""},
    {"hw_key": "WXYZ9876STUV5432PQRS1098LMNO6543", "is_online": false, "name": "cMT-EFGH", "nickname": "HMI2", "vpn_ip": "", "vpn_state": "disconnected", "vpn_type": ""}
  ]
}
python
import subprocess
import json

result = subprocess.run(["ea20_cli.exe", "--get-hmi-list"], capture_output=True, text=True)
if result.returncode == 0:
    hmi_list = json.loads(result.stdout)
    for hmi in hmi_list['data']:
        print(f"HW Key: {hmi['hw_key']}")
        print(f"Nickname: {hmi.get('nickname', 'N/A')}")
        print(f"Online: {hmi['is_online']}")
        print("-" * 40)
    # Output:
    # HW Key: ABCD1234EFGH5678IJKL9012MNOP3456
    # Nickname: HMI1
    # Online: True
    # ----------------------------------------
    # HW Key: WXYZ9876STUV5432PQRS1098LMNO6543
    # Nickname: HMI2
    # Online: False
    # ----------------------------------------
powershell
$result = ea20_cli.exe --get-hmi-list | ConvertFrom-Json
foreach ($hmi in $result.data) {
    Write-Host "HW Key: $($hmi.hw_key)"
    Write-Host "Nickname: $($hmi.nickname)"
    Write-Host "Online: $($hmi.is_online)"
    Write-Host ("-" * 40)
}
# Output:
# HW Key: ABCD1234EFGH5678IJKL9012MNOP3456
# Nickname: HMI1
# Online: True
# ----------------------------------------
# HW Key: WXYZ9876STUV5432PQRS1098LMNO6543
# Nickname: HMI2
# Online: False
# ----------------------------------------

範例 4:連線到 HMI 並取得 VPN IP

CLI 輸出(成功時):

bash
ea20_cli.exe --connect ABCD1234EFGH5678IJKL9012MNOP3456
text
10.7.0.1
python
import subprocess

HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"

result = subprocess.run(["ea20_cli.exe", "--connect", HW_KEY], capture_output=True, text=True)
if result.returncode == 0:
    vpn_ip = result.stdout.strip()
    print(f"VPN IP: {vpn_ip}")
    # Output: VPN IP: 10.7.0.1
powershell
$HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"

$VPN_IP = ea20_cli.exe --connect $HW_KEY
Write-Host "VPN IP: $VPN_IP"
# Output: VPN IP: 10.7.0.1

現在您可以使用此 VPN IP 存取 HMI:

  • VNC: 10.7.0.1:5900
  • FTP: ftp://10.7.0.1
  • HTTP: http://10.7.0.1

範例 5:設定穿透

python
import subprocess

HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
PLC_IP = "192.168.1.10"

result = subprocess.run(["ea20_cli.exe", "--set-hmi-passthrough", HW_KEY, PLC_IP], 
                       capture_output=True, text=True)
if result.returncode == 0:
    print("Pass-through configured successfully")
    subprocess.run(["ping", PLC_IP])
powershell
$HW_KEY = "ABCD1234EFGH5678IJKL9012MNOP3456"
$PLC_IP = "192.168.1.10"

ea20_cli.exe --set-hmi-passthrough $HW_KEY $PLC_IP
if ($LASTEXITCODE -eq 0) {
    Write-Host "Pass-through configured successfully"
    ping $PLC_IP
}

完整範例腳本

以下提供完整的範例腳本,演示所有 EA20-CLI 功能(包括錯誤處理、路由驗證和連線測試):

📥 下載 ea20_cli_example.py (Python)

📥 下載 ea20_cli_example.ps1 (PowerShell)

使用方式:

bash
python ea20_cli_example.py <hwkey> <穿透IP>

# 範例:
python ea20_cli_example.py ABCD1234EFGH5678IJKL9012MNOP3456 192.168.1.10
powershell
.\ea20_cli_example.ps1 <hwkey> <穿透IP>

# 範例:
.\ea20_cli_example.ps1 ABCD1234EFGH5678IJKL9012MNOP3456 192.168.1.10

這些腳本包括:

  • 使用已儲存的帳號密碼登入
  • 使用者資訊擷取
  • HMI 清單列舉
  • VPN 連線建立
  • 穿透設定
  • 路由驗證和 ping 測試
  • 正確的錯誤處理和輸出格式化