[{"data":1,"prerenderedAt":137},["ShallowReactive",2],{"manual-Custom-Elock-zh-TW":3},{"model":4,"locale":5,"headings":6,"html":134,"markdown":135,"pdf":136},"Custom-Elock","zh-TW",[7,11,14,18,21,24,28,31,34,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131],{"id":8,"title":9,"level":10},"section-1","前言",2,{"id":12,"title":13,"level":10},"section-2","API 整合流程總覽",{"id":15,"title":16,"level":17},"section-3","各步驟說明",3,{"id":19,"title":20,"level":17},"section-4","範疇說明",{"id":22,"title":23,"level":17},"section-5","實機核對範圍",{"id":25,"title":26,"level":27},"section-6","第1章 自訂電子鎖整合",1,{"id":29,"title":30,"level":10},"section-7","1. 認證與統一入口",{"id":32,"title":33,"level":17},"section-8","1.1 create-app-token（程式 → 設備）",{"id":35,"title":36,"level":37},"section-9","1.1.1 Request Body（必填與選填）",4,{"id":39,"title":40,"level":37},"section-10","1.1.2 Response Body（成功時）",{"id":42,"title":43,"level":37},"section-11","1.1.3 curl 範例：取得 Token 並設為環境變數",{"id":45,"title":46,"level":17},"section-12","1.2 請求情境與 Bearer 用途（摘要）",{"id":48,"title":49,"level":37},"section-13","憑證用途對照",{"id":51,"title":52,"level":17},"section-14","1.3 統一入口 restful-api（摘要）",{"id":54,"title":55,"level":17},"section-15","1.4 上線前需確認的版本差異",{"id":57,"title":58,"level":10},"section-16","2. 主動上報",{"id":60,"title":61,"level":17},"section-17","2.1 事件（eventUrl）",{"id":63,"title":64,"level":17},"section-18","2.2 存活 Ping（pingUrl）",{"id":66,"title":67,"level":17},"section-19","2.3 介面值（ifaceUrl）",{"id":69,"title":70,"level":17},"section-20","2.4 工程模式／週邊資訊：位址對應週邊",{"id":72,"title":73,"level":17},"section-21","2.5 使用 Mockoon 模擬主機（本機接收）",{"id":75,"title":76,"level":37},"section-22","2.5.1 操作步驟摘要",{"id":78,"title":79,"level":37},"section-23","2.5.2 Logs 除錯",{"id":81,"title":82,"level":10},"section-24","3. GET \u002Finterfaces（hwctrl）",{"id":84,"title":85,"level":17},"section-25","3.1 用途",{"id":87,"title":88,"level":17},"section-26","3.2 經統一入口呼叫",{"id":90,"title":91,"level":17},"section-27","3.3 curl 範例（Bash）",{"id":93,"title":94,"level":17},"section-28","3.4 相關 API（選用）",{"id":96,"title":97,"level":10},"section-29","4. 事件記錄（history \u002F logs）",{"id":99,"title":100,"level":17},"section-30","4.1 GET \u002Flogs — 依時間查詢",{"id":102,"title":103,"level":17},"section-31","4.2 完整 URL（query）",{"id":105,"title":106,"level":17},"section-32","4.3 查詢參數",{"id":108,"title":109,"level":17},"section-33","4.4 經統一入口呼叫",{"id":111,"title":112,"level":17},"section-34","4.5 curl 範例（Bash）",{"id":114,"title":115,"level":17},"section-35","4.6 與主動事件的關係",{"id":117,"title":118,"level":17},"section-36","4.7 GET \u002Flogs\u002Fmax-seq — 設備最大 seq（主機補件）",{"id":120,"title":121,"level":17},"section-37","4.8 GET \u002Flogs\u002Fsync — 依 seq 區間補足缺失（主機）",{"id":123,"title":124,"level":17},"section-38","4.9 補同步與資料保留注意事項",{"id":126,"title":127,"level":10},"section-39","5. 事件模板與語系對應",{"id":129,"title":130,"level":17},"section-40","5.1 英文語系（English）",{"id":132,"title":133,"level":17},"section-41","5.2 中文語系（繁體）","\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fcover.jpeg\" alt=\"圖片\">\u003C\u002Fp>\n\u003C!-- 專用整合指南：目錄放在封面之後。 -->\n\u003Cdiv id=\"manual-toc\">\u003C\u002Fdiv>\n\n\u003Ch2 id=\"section-1\">前言\u003C\u002Fh2>\n\u003Cp>本文件說明設備與自訂電子鎖主機整合時之常用項目；\u003Cstrong>主機上報 token\u003C\u002Fstrong> 與 \u003Cstrong>設備 API token\u003C\u002Fstrong> 用途不同，應分開管理（見 \u003Cstrong>§1.2\u003C\u002Fstrong>）。\u003Cstrong>向設備取得設備 API token\u003C\u002Fstrong> 見 \u003Cstrong>§1.1\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>設備 → 主機\u003C\u002Fstrong> 運行期主動上報（事件、Ping、介面值）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>工程模式／週邊資訊\u003C\u002Fstrong>：介面位址 \u003Ccode>addr\u003C\u002Fcode> 與週邊對應畫面\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mockoon\u003C\u002Fstrong>：本機模擬主機接收上報、Logs 除錯\u003C\u002Fli>\n\u003Cli>\u003Cstrong>設備介面查詢\u003C\u002Fstrong>：經 \u003Cstrong>§1.3\u003C\u002Fstrong> 統一入口呼叫 \u003Cstrong>\u003Ccode>hwctrl\u003C\u002Fcode>\u003C\u002Fstrong> 的 \u003Cstrong>\u003Ccode>GET \u002Finterfaces\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>歷史紀錄\u003C\u002Fstrong>：經 \u003Cstrong>§1.3\u003C\u002Fstrong> 統一入口呼叫 \u003Cstrong>\u003Ccode>history\u003C\u002Fcode>\u003C\u002Fstrong> 的 \u003Cstrong>\u003Ccode>GET \u002Flogs\u003C\u002Fcode>\u003C\u002Fstrong>（時間查詢）、\u003Cstrong>\u003Ccode>GET \u002Flogs\u002Fmax-seq\u003C\u002Fcode>\u003C\u002Fstrong>、\u003Cstrong>\u003Ccode>GET \u002Flogs\u002Fsync\u003C\u002Fcode>\u003C\u002Fstrong>（主機補足缺失，§4.7～4.8）\u003C\u002Fli>\n\u003Cli>\u003Cstrong>事件訊息語系\u003C\u002Fstrong>：模板與中英文對照見 \u003Cstrong>§5\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"section-2\">API 整合流程總覽\u003C\u002Fh2>\n\u003Cp>下列流程涵蓋「一次性設定」與「運行期持續上報」，並標示本文件各節之對應關係。\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fintegration-flow.svg\" alt=\"設備與主機 API 整合流程\">\u003C\u002Fp>\n\u003Ch3 id=\"section-3\">各步驟說明\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>步驟\u003C\u002Fth>\n\u003Cth>誰發起\u003C\u002Fth>\n\u003Cth>要做的事\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>① 主機連線資訊\u003C\u002Ftd>\n\u003Ctd>開發商\u003C\u002Ftd>\n\u003Ctd>確認主機 \u003Ccode>ip\u003C\u002Fcode>、\u003Ccode>port\u003C\u002Fcode>、HTTP／HTTPS 協定及憑證設定。埠號不會自動啟用 TLS；URL 為 \u003Ccode>protocol:\u002F\u002Fip:port\u003C\u002Fcode> 加上各上報路徑。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>② 取得 app-token\u003C\u002Ftd>\n\u003Ctd>第三方程式 → \u003Cstrong>設備\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>向設備 \u003Ccode>POST …\u002Fcreate-app-token\u003C\u002Fcode>（帳密與必填 \u003Ccode>host\u003C\u002Fcode>），取得 \u003Ccode>accessToken\u003C\u002Fcode>、\u003Ccode>urlToken\u003C\u002Fcode>；詳見 \u003Cstrong>§1.1\u003C\u002Fstrong>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>③ 保存 Token 與認證\u003C\u002Ftd>\n\u003Ctd>第三方程式\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>呼叫設備\u003C\u002Fstrong>時使用回應 body 之 \u003Ccode>accessToken\u003C\u002Fcode>（或 \u003Ccode>appToken\u003C\u002Fcode>）作為 \u003Ccode>Authorization: Bearer …\u003C\u002Fcode>。\u003Cstrong>設備 → 主機\u003C\u002Fstrong>上報所用 Token 見 \u003Cstrong>§1.2\u003C\u002Fstrong>，兩者勿混用。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>④ 送事件／Ping／介面值\u003C\u002Ftd>\n\u003Ctd>設備／程式 → \u003Cstrong>主機\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>依時機或週期送 \u003Ccode>eventUrl\u003C\u002Fcode>、\u003Ccode>pingUrl\u003C\u002Fcode>、\u003Ccode>ifaceUrl\u003C\u002Fcode>；格式見 \u003Cstrong>§2\u003C\u002Fstrong>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>⑤ 主機回應與驗證\u003C\u002Ftd>\n\u003Ctd>主機／開發商\u003C\u002Ftd>\n\u003Ctd>驗證 Token、回傳狀態碼與 JSON；本機可用 Mockoon 驗證，見 \u003Cstrong>§2.5\u003C\u002Fstrong>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>⑥ 查詢介面與紀錄\u003C\u002Ftd>\n\u003Ctd>第三方程式 → \u003Cstrong>設備\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>經 \u003Cstrong>§1.3\u003C\u002Fstrong> 統一入口呼叫 \u003Ccode>GET \u002Finterfaces\u003C\u002Fcode>、\u003Ccode>GET \u002Flogs\u003C\u002Fcode>、\u003Ccode>GET \u002Flogs\u002Fmax-seq\u003C\u002Fcode>、\u003Ccode>GET \u002Flogs\u002Fsync\u003C\u002Fcode> 等，見 \u003Cstrong>§3、§4\u003C\u002Fstrong>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>運行期：\u003C\u002Fstrong> ④⑤ 與 ⑥ 可並行。\u003Cstrong>設備 → 主機\u003C\u002Fstrong>上報使用 \u003Cstrong>主機上報 token\u003C\u002Fstrong>（\u003Cstrong>§1.2\u003C\u002Fstrong>）；\u003Cstrong>程式 → 設備\u003C\u002Fstrong>使用 \u003Cstrong>設備 API token\u003C\u002Fstrong>（\u003Cstrong>§1.3\u003C\u002Fstrong>），\u003Cstrong>兩者用途不同\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Ch3 id=\"section-4\">範疇說明\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>類別\u003C\u002Fth>\n\u003Cth>內容\u003C\u002Fth>\n\u003Cth>本文件\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>Token 與主機導向\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>create-app-token\u003C\u002Fcode>、必填 \u003Ccode>host\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>§1.1～1.2\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>A. 主機接收設備資料\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>事件、Ping、介面值\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>§2\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>B. 查詢與介面\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>介面列表、歷史紀錄、主機補件（seq）\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>§3、§4\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>C. 訊息語系\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>事件模板與語系\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>§5\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>建議順序：\u003Cstrong>先完成 §1.1（\u003Ccode>create-app-token\u003C\u002Fcode>）與必填 \u003Ccode>host\u003C\u002Fcode>\u003C\u002Fstrong>，再完成 \u003Cstrong>A（上報鏈路）\u003C\u002Fstrong>，最後串 \u003Cstrong>B\u003C\u002Fstrong> 查詢與 \u003Cstrong>C\u003C\u002Fstrong> 顯示。\u003C\u002Fp>\n\u003Ch3 id=\"section-5\">實機核對範圍\u003C\u002Fh3>\n\u003Cp>本次以 2026-09-17 的設備進行唯讀核對；\u003Ccode>hwctrl\u003C\u002Fcode> 與 \u003Ccode>history\u003C\u002Fcode> 回報版本 \u003Ccode>0.0.1\u003C\u002Fcode>、建置編號 \u003Ccode>202609172144\u003C\u002Fcode>。已確認一般登入、介面列表、事件查詢與補同步、通知語系查詢的回應。\u003C\u002Fp>\n\u003Cp>核對先使用一般登入後的 \u003Ccode>\u002Fapi\u002Fhwctrl\u002F...\u003C\u002Fcode> 與 \u003Ccode>\u002Fapi\u002Fhistory\u002F...\u003C\u002Fcode> 路徑，再使用測試 \u003Ccode>host\u003C\u002Fcode> 成功呼叫 \u003Ccode>create-app-token\u003C\u002Fcode>，取得 \u003Ccode>accessToken\u003C\u002Fcode>。已用該 Token 經 \u003Ccode>restful-api\u003C\u002Fcode> 測通歷史查詢、最大 seq、補同步、介面列表、告警彙總／明細及通知語系讀取；均回傳 HTTP 200，且 \u003Ccode>session\u003C\u002Fcode> 一致。尚未測試開鎖、設定 PATCH、金鑰刷新或主動上報接收；取得 Token 不代表測試 host 已具備接收能力。\u003C\u002Fp>\n\u003Ch1 id=\"section-6\">第1章 自訂電子鎖整合\u003C\u002Fh1>\n\u003Cp>本章說明設備與自訂電子鎖主機的整合方式，包含認證、統一入口、主動上報、介面值、事件記錄與語系設定。\u003C\u002Fp>\n\u003Ch2 id=\"section-7\">1. 認證與統一入口\u003C\u002Fh2>\n\u003Ch3 id=\"section-8\">1.1 \u003Ccode>create-app-token\u003C\u002Fcode>（程式 → 設備）\u003C\u002Fh3>\n\u003Cp>第三方程式向\u003Cstrong>設備\u003C\u002Fstrong>呼叫 \u003Ccode>create-app-token\u003C\u002Fcode>，主要取得\u003Cstrong>呼叫設備 API\u003C\u002Fstrong>（如 \u003Cstrong>§1.3\u003C\u002Fstrong> \u003Ccode>restful-api\u003C\u002Fcode>）所用之 \u003Cstrong>\u003Ccode>accessToken\u003C\u002Fcode>\u003C\u002Fstrong>。設備向主機上報所用的憑證則設定於 \u003Cstrong>\u003Ccode>host.accessToken\u003C\u002Fcode>\u003C\u002Fstrong>，由接收主機的認證規格決定。兩者用途不同，請分開保存；不要假設設備核發的 Token 可直接通過主機認證。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Request Headers\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Header\u003C\u002Fth>\n\u003Cth>值\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>Content-Type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>application\u002Fjson\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch4 id=\"section-9\">1.1.1 Request Body（必填與選填）\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>此版本必須包含 \u003Ccode>host\u003C\u002Fcode>。\u003C\u002Fstrong> 在建置版本 \u003Ccode>202609172144\u003C\u002Fcode>，只傳帳密、\u003Ccode>expiration\u003C\u002Fcode> 與 \u003Ccode>refreshKey\u003C\u002Fcode> 會回傳 HTTP 400，訊息為 \u003Ccode>Missing required fields: host\u003C\u002Fcode>。因此不能用省略 \u003Ccode>host\u003C\u002Fcode> 的方式取得應用程式 Token。\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\u003Cstrong>警告\u003C\u002Fstrong>：此 API 的請求包含主機上報設定。正式呼叫前，先確認要使用的主機位址、上報路徑及憑證；不要將下列示例值直接套用到運行中的設備。此次已經使用經同意的測試 host 建立 Token；測試值僅供驗證，正式上報前須替換為實際主機設定。\u003C\u002Fp>\u003C\u002Fblockquote>\n\n\u003Cp>\u003Cstrong>完整請求範例（主機欄位依整合環境填入）\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"username\": \"user123\",\n  \"password\": \"123456\",\n  \"expiration\": 0,\n  \"refreshKey\": false,\n  \"host\": {\n    \"name\": \"host1\",\n    \"ip\": \"192.168.1.100\",\n    \"port\": 443,\n    \"deviceId\": \"device1\",\n    \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"eventUrl\": \"\u002Fapi\u002Fhistory\u002Fevents\",\n    \"pingUrl\": \"\u002Fapi\u002Fdevices\u002Fping\",\n    \"ifaceUrl\": \"\u002Fapi\u002Fdevice\u002Finterfaces\u002Fvalues\",\n    \"pingInterval\": 900,\n    \"ifaceInterval\": 900,\n    \"ifaceErrorInterval\": 30\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>必填\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>username\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>設備登入帳號\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>password\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>設備登入密碼\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>expiration\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>Token 有效期限設定；本文件以 \u003Ccode>0\u003C\u002Fcode> 為範例，其單位及 \u003Ccode>0\u003C\u002Fcode> 的實際含義須依目標韌體確認。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>refreshKey\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>本文件以 \u003Ccode>false\u003C\u002Fcode> 為範例；設為 \u003Ccode>true\u003C\u002Fcode> 的作用及是否使既有 Token 失效，須依目標韌體確認。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>host\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>此版本不可省略；內含主機位址與上報設定；此次以 name、ip、port、deviceId 四個欄位成功建立 Token。上報路徑須與 §2 接收端路由一致。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>\u003Ccode>host\u003C\u002Fcode> 內的欄位說明\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>實測只傳 \u003Ccode>ip\u003C\u002Fcode> 時回傳 400，指出缺少 \u003Ccode>name\u003C\u002Fcode>、\u003Ccode>port\u003C\u002Fcode>、\u003Ccode>deviceId\u003C\u002Fcode>；補齊這三項後，以 \u003Ccode>expiration: 0\u003C\u002Fcode>、\u003Ccode>refreshKey: false\u003C\u002Fcode> 成功回傳 200。此結果只確認 Token 建立成功，不代表上報接收流程已通過。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>主機名稱\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ip\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>設備可連線的主機 IP；跨設備測試時不可填 \u003Ccode>localhost\u003C\u002Fcode> 或 \u003Ccode>127.0.0.1\u003C\u002Fcode>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>port\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>主機埠（例如 \u003Ccode>443\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deviceId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>設備識別碼（與上報 JSON 之 \u003Ccode>deviceId\u003C\u002Fcode> 對應）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>accessToken\u003C\u002Fcode>（僅 \u003Cstrong>\u003Ccode>host\u003C\u002Fcode>\u003C\u002Fstrong> 內）\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>主機上報 Token\u003C\u002Fstrong>。由主機或專案提供可接受的憑證後寫入；設備上報使用的 \u003Ccode>Authorization: Bearer …\u003C\u002Fcode> 須符合主機約定。此欄位與回應的設備 API \u003Ccode>accessToken\u003C\u002Fcode> 用途不同；是否採用 JWT、是否允許省略，須確認主機與韌體規格。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>eventUrl\u003C\u002Fcode> \u002F \u003Ccode>pingUrl\u003C\u002Fcode> \u002F \u003Ccode>ifaceUrl\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>三條上報路徑，須與主機或 Mockoon Route \u003Cstrong>完全一致\u003C\u002Fstrong>（含前綴、\u003Ccode>ifaceUrl\u003C\u002Fcode> 是否含 \u003Ccode>\u002Fvalues\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pingInterval\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Ping 週期（秒），本文件範例為 \u003Ccode>900\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ifaceInterval\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>介面值定時上報週期（秒），本文件範例為 \u003Ccode>900\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ifaceErrorInterval\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>介面值上報失敗後重試間隔（秒），本文件範例為 \u003Ccode>30\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cul>\n\u003Cli>使用 \u003Cstrong>Mockoon\u003C\u002Fstrong> 本機測試時，將 \u003Ccode>host.ip\u003C\u002Fcode>、\u003Ccode>host.port\u003C\u002Fcode> 設為 Mockoon 監聽位址與埠即可。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"section-10\">1.1.2 Response Body（成功時）\u003C\u002Fh4>\n\u003Cp>已實測 HTTP 200，回應包含 \u003Ccode>accessToken\u003C\u002Fcode>、\u003Ccode>urlToken\u003C\u002Fcode>、\u003Ccode>username\u003C\u002Fcode>、\u003Ccode>fullName\u003C\u002Fcode>、\u003Ccode>role\u003C\u002Fcode>。下列範例僅列整合使用的兩個 Token 欄位。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"urlToken\": \"rH3Zkrpzr_Jb134hvz2q5FIwYg0f9QqNV1mfAvdvPu7...\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>accessToken\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>供 \u003Cstrong>程式 → 設備\u003C\u002Fstrong> 呼叫 \u003Ccode>restful-api\u003C\u002Fcode> 等 API 時，置於 \u003Ccode>Authorization: Bearer …\u003C\u002Fcode>（此版本已實測欄位名為 \u003Ccode>accessToken\u003C\u002Fcode>；範例程式另容許舊版 \u003Ccode>appToken\u003C\u002Fcode>）。\u003Cstrong>不作為\u003C\u002Fstrong>設備 → 主機上報憑證；上報請依 \u003Cstrong>§1.2\u003C\u002Fstrong> 使用 \u003Ccode>host.accessToken\u003C\u002Fcode> 或韌體約定。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>urlToken\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>中控網頁／URL Token 等流程使用（與本文件 \u003Cstrong>§3、§4\u003C\u002Fstrong> 無直接關聯時可僅保存）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>HTTP\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>200\u003C\u002Ftd>\n\u003Ctd>成功（已實測取得 accessToken 與 urlToken）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>400\u003C\u002Ftd>\n\u003Ctd>請求缺少必填欄位；此版本已確認省略 \u003Ccode>host\u003C\u002Fcode> 會得到此回應。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch4 id=\"section-11\">1.1.3 curl 範例：取得 Token 並設為環境變數\u003C\u002Fh4>\n\u003Cp>下列與後續 curl 範例中的 \u003Ccode>-k\u003C\u002Fcode> 僅用於測試設備的自簽憑證；正式使用請配置信任憑證後移除，或改用 \u003Ccode>--cacert &lt;CA檔案&gt;\u003C\u002Fcode>。範例帳密僅供示意，請換成實際帳號。後續 §3、§4 範例須在同一個 shell 中執行，沿用 \u003Ccode>DEVICE_IP\u003C\u002Fcode> 與 \u003Ccode>ACCESS_TOKEN\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Bash（macOS \u002F Linux \u002F Git Bash \u002F WSL）\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode># host.json 為已核定的 host 物件，不含外層 host 鍵。\n# 請勿直接使用手冊示例位址覆蓋現有主機設定。\nDEVICE_IP=\"&lt;設備-ip&gt;\"\nUSERNAME=\"&lt;設備帳號&gt;\"\nPASSWORD=\"&lt;設備密碼&gt;\"\n\nREQUEST_JSON=$(jq -en \\\n  --arg username \"$USERNAME\" --arg password \"$PASSWORD\" \\\n  --slurpfile host host.json \\\n  'if ($host | length) == 1 and ($host[0] | type) == \"object\"\n   then {username:$username, password:$password,\n         expiration:0, refreshKey:false, host:$host[0]}\n   else error(\"host.json 必須包含一個 host 物件\") end') || exit 1\nTOKEN_JSON=$(curl -k -f -sS -X POST \\\n  \"https:\u002F\u002F${DEVICE_IP}\u002Fapp-token\u002Fcreate-app-token\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  --data-binary \"$REQUEST_JSON\") || exit 1\n\nACCESS_TOKEN=$(printf '%s' \"$TOKEN_JSON\" | jq -er \\\n  '(.accessToken \u002F\u002F .appToken) | select(type == \"string\" and length &gt; 0)') || exit 1\nURL_TOKEN=$(printf '%s' \"$TOKEN_JSON\" | jq -r '.urlToken \u002F\u002F empty')\nAUTH_HEADER=\"Authorization: Bearer ${ACCESS_TOKEN}\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>PowerShell（Windows）\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$DEVICE_IP = \"&lt;設備-ip&gt;\"\n$USERNAME = \"&lt;設備帳號&gt;\"\n$PASSWORD = \"&lt;設備密碼&gt;\"\n$HOST_CONFIG = Get-Content -Raw -Encoding UTF8 .\\host.json | ConvertFrom-Json\n\n$BODY = @{\n  username = $USERNAME\n  password = $PASSWORD\n  expiration = 0\n  refreshKey = $false\n  host = $HOST_CONFIG\n} | ConvertTo-Json -Depth 10\n\n$TOKEN_JSON = curl.exe -k -f -sS -X POST \"https:\u002F\u002F$DEVICE_IP\u002Fapp-token\u002Fcreate-app-token\" `\n  -H \"Content-Type: application\u002Fjson\" `\n  -d $BODY\n\nif ($LASTEXITCODE -ne 0) { throw \"取得設備 Token 失敗\" }\n$TOKEN_OBJ = $TOKEN_JSON | ConvertFrom-Json\n$ACCESS_TOKEN = if ($TOKEN_OBJ.accessToken) { $TOKEN_OBJ.accessToken } else { $TOKEN_OBJ.appToken }\nif (-not $ACCESS_TOKEN) { throw \"回應未包含設備 API Token\" }\n$URL_TOKEN = $TOKEN_OBJ.urlToken\n\n$AUTH_HEADER = \"Authorization: Bearer $ACCESS_TOKEN\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>取得 \u003Ccode>AUTH_HEADER\u003C\u002Fcode>（內含 \u003Cstrong>設備 API 用\u003C\u002Fstrong> \u003Ccode>accessToken\u003C\u002Fcode>）後，用於呼叫 \u003Cstrong>§1.3\u003C\u002Fstrong> \u003Ccode>restful-api\u003C\u002Fcode>。\u003Cstrong>設備 → 主機\u003C\u002Fstrong>上報之 Bearer 請依 \u003Cstrong>§1.2\u003C\u002Fstrong> 另備（多為 \u003Cstrong>\u003Ccode>host.accessToken\u003C\u002Fcode>\u003C\u002Fstrong>），勿逕自沿用 \u003Ccode>ACCESS_TOKEN\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch3 id=\"section-12\">1.2 請求情境與 Bearer 用途（摘要）\u003C\u002Fh3>\n\u003Cp>兩種請求方向有不同的驗證對象：設備驗證 \u003Cstrong>設備 API Token\u003C\u002Fstrong>，接收主機驗證 \u003Cstrong>主機上報 Token\u003C\u002Fstrong>。請使用不同變數保存，不要自行將一方的憑證用於另一方。\u003C\u002Fp>\n\u003Ch4 id=\"section-13\">憑證用途對照\u003C\u002Fh4>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>情境\u003C\u002Fth>\n\u003Cth>\u003Ccode>Authorization\u003C\u002Fcode> 建議寫法\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>程式 → 設備\u003C\u002Fstrong>（\u003Ccode>restful-api\u003C\u002Fcode> 等）\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Bearer &lt;deviceApiToken&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>設備 API token\u003C\u002Fstrong>：即 \u003Ccode>create-app-token\u003C\u002Fcode> 成功回應 body 之 \u003Cstrong>\u003Ccode>accessToken\u003C\u002Fcode>\u003C\u002Fstrong>（舊版 \u003Cstrong>\u003Ccode>appToken\u003C\u002Fcode>\u003C\u002Fstrong>）。\u003Cstrong>僅\u003C\u002Fstrong>用於呼叫設備；\u003Cstrong>不是\u003C\u002Fstrong>主機上報 token。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>設備 → 主機\u003C\u002Fstrong>（上報）\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Bearer &lt;hostReportToken&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>主機上報 token\u003C\u002Fstrong>：主機要求設備在上報 URL 出示的憑證。須由主機或專案核發後寫入 \u003Cstrong>\u003Ccode>host.accessToken\u003C\u002Fcode>\u003C\u002Fstrong>。主機是否接受某一憑證，取決於主機的驗證設定；未配置時請確認主機／韌體規格，不要直接以 body 的 \u003Ccode>accessToken\u003C\u002Fcode> 代替。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-14\">1.3 統一入口 \u003Ccode>restful-api\u003C\u002Fcode>（摘要）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>項目\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>URL\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST https:\u002F\u002F&lt;設備-ip&gt;\u002Fapp-token\u002Frestful-api\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Header\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Content-Type: application\u002Fjson\u003C\u002Fcode>、\u003Ccode>Authorization: Bearer &lt;deviceApiToken&gt;\u003C\u002Fcode>（即 \u003Cstrong>§1.2\u003C\u002Fstrong> 之 \u003Cstrong>\u003Ccode>accessToken\u003C\u002Fcode>／\u003Ccode>appToken\u003C\u002Fcode>\u003C\u002Fstrong>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>Request Body 共通欄位\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>session\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>追蹤識別字串\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>serviceName\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>hwctrl\u003C\u002Fcode> 或 \u003Ccode>history\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>url\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>目標服務路徑（\u003Ccode>GET\u003C\u002Fcode> 可含 query string）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>method\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>GET\u003C\u002Fcode> \u002F \u003Ccode>POST\u003C\u002Fcode> \u002F \u003Ccode>PATCH\u003C\u002Fcode> \u002F \u003Ccode>DELETE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>body\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>目標服務的請求內容；\u003Ccode>GET\u003C\u002Fcode> 範例省略整個 \u003Ccode>body\u003C\u002Fcode> 欄位。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>Response 共通格式\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"session\": \"&lt;與請求相同&gt;\",\n  \"body\": {}\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>HTTP 狀態碼：200 正常、400 參數錯誤、401 未授權、500 伺服器錯誤。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>實測結果\u003C\u002Fstrong>：使用 \u003Ccode>create-app-token\u003C\u002Fcode> 核發的 \u003Ccode>accessToken\u003C\u002Fcode>，以下 GET 查詢均經本統一入口回傳 HTTP 200，且回應 \u003Ccode>session\u003C\u002Fcode> 與請求一致：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>history\u003C\u002Fcode>：\u003Ccode>\u002Flogs?offset=0&amp;limit=2\u003C\u002Fcode>、\u003Ccode>\u002Flogs\u002Fmax-seq\u003C\u002Fcode>、\u003Ccode>\u002Flogs\u002Fsync\u003C\u002Fcode>（帶 seq 區間及 \u003Ccode>lang=zh-hant\u003C\u002Fcode>）、\u003Ccode>\u002Fconfig\u002Fnotify-lang\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>\u003Ccode>hwctrl\u003C\u002Fcode>：\u003Ccode>\u002Finterfaces\u003C\u002Fcode>、\u003Ccode>\u002Finterfaces\u002Falarms\u003C\u002Fcode>、\u003Ccode>\u002Finterfaces\u002Falarms\u002Fwarnings\u003C\u002Fcode>、\u003Ccode>\u002Finterfaces\u002Falarms\u002Fcritical\u003C\u002Fcode>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>查詢資料位於回應的 \u003Ccode>body\u003C\u002Fcode>；\u003Ccode>\u002Finterfaces\u003C\u002Fcode> 的 \u003Ccode>body\u003C\u002Fcode> 是陣列，其餘上述查詢為物件。一般網頁登入 \u003Ccode>\u002Fapi\u002Fauth\u002Flogin\u003C\u002Fcode> 的 Token 用於此入口則回傳 401，不能取代應用程式 Token。時間篩選與時間單位的細部測試先前使用 \u003Ccode>\u002Fapi\u002Fhistory\u002F...\u003C\u002Fcode> 路徑，本次統一入口歷史查詢驗證分頁取回 2 筆，補同步取回 1 筆。未測試設定寫入、開鎖或主動上報接收。\u003C\u002Fp>\n\u003Ch3 id=\"section-15\">1.4 上線前需確認的版本差異\u003C\u002Fh3>\n\u003Cp>本文件的 \u003Ccode>create-app-token\u003C\u002Fcode>、\u003Ccode>host\u003C\u002Fcode> 與統一入口範例須配合目標韌體驗證。現有參考資料未提供下列行為的完整定義：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>expiration\u003C\u002Fcode> 的單位、\u003Ccode>0\u003C\u002Fcode> 的意義及 Token 到期後的處理方式。\u003C\u002Fli>\n\u003Cli>\u003Ccode>refreshKey=true\u003C\u002Fcode> 的作用與既有 Token 是否失效。\u003C\u002Fli>\n\u003Cli>上報採 HTTP 或 HTTPS 的選擇方式、TLS 憑證驗證規則。不能僅依 \u003Ccode>port\u003C\u002Fcode> 推定協定。\u003C\u002Fli>\n\u003Cli>\u003Ccode>host\u003C\u002Fcode> 各欄位省略時的預設值，以及上報失敗的重送與保留策略。\u003C\u002Fli>\n\u003Cli>統一入口遇到認證失敗或下游錯誤時，HTTP 狀態碼與回應格式的對應。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>請以目標韌體的介面規格或實機測試確認上述項目，再作為正式整合契約。\u003C\u002Fp>\n\u003Ch2 id=\"section-16\">2. 主動上報\u003C\u002Fh2>\n\u003Cp>上報路徑範例（實際以 \u003Ccode>host\u003C\u002Fcode> 設定為準）：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>用途\u003C\u002Fth>\n\u003Cth>方法\u003C\u002Fth>\n\u003Cth>路徑\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>事件\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fhistory\u002Fevents\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>存活 Ping\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fdevices\u002Fping\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>介面值\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fdevice\u002Finterfaces\u002Fvalues\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-17\">2.1 事件（\u003Ccode>eventUrl\u003C\u002Fcode>）\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>時機\u003C\u002Fstrong>：告警、狀態變化等（非固定週期）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Request Body 範例\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"deviceId\": \"device1\",\n  \"seq\": 1001,\n  \"time\": 1700050000,\n  \"level\": 3,\n  \"msg\": \"[門禁1] 卡號 [1234567890] 開鎖\",\n  \"kind\": 1,\n  \"template\": \"elockCardUnlock\",\n  \"args\": {\n    \"pName\": \"門禁1\",\n    \"iValue\": \"1234567890\"\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>必填\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>deviceId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>設備識別碼\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seq\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>事件流水號（與 \u003Ccode>GET \u002Flogs\u002Fsync\u003C\u002Fcode> 之 \u003Cstrong>seq\u003C\u002Fstrong> 一致）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>time\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>Unix 時間戳（秒）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>level\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>3 資訊、4 正常、5 警告、6 危急\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>msg\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>人類可讀事件訊息\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>kind\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>週邊類型\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>template\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>事件模板鍵（與 \u003Cstrong>§5\u003C\u002Fstrong> 語系表一致時便於還原多語訊息）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>args\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>模板變數物件（見 \u003Cstrong>§5\u003C\u002Fstrong>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>alarmSeries\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>否\u003C\u002Ftd>\n\u003Ctd>告警趨勢；有告警趨勢資料時一併上送，格式與 \u003Cstrong>§4.1\u003C\u002Fstrong>／\u003Cstrong>§4.8\u003C\u002Fstrong> 回傳相同\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>主機建議回應\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{ \"success\": true }\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>HTTP\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>200\u003C\u002Ftd>\n\u003Ctd>成功\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>400\u003C\u002Ftd>\n\u003Ctd>格式錯誤\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>401\u003C\u002Ftd>\n\u003Ctd>認證失敗\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>500\u003C\u002Ftd>\n\u003Ctd>伺服器錯誤\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-18\">2.2 存活 Ping（\u003Ccode>pingUrl\u003C\u002Fcode>）\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>時機\u003C\u002Fstrong>：每 \u003Ccode>pingInterval\u003C\u002Fcode> 秒（本文件範例為 900）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode>{ \"deviceId\": \"device1\" }\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>回應同 2.1：\u003Ccode>{\"success\": true}\u003C\u002Fcode> 與上表狀態碼。\u003C\u002Fp>\n\u003Ch3 id=\"section-19\">2.3 介面值（\u003Ccode>ifaceUrl\u003C\u002Fcode>）\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>定時全量\u003C\u002Fstrong>：每 \u003Ccode>ifaceInterval\u003C\u002Fcode> 秒，使用 \u003Ccode>values\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>異動加送\u003C\u002Fstrong>：使用 \u003Ccode>updates\u003C\u002Fcode>（含 \u003Ccode>status\u003C\u002Fcode> \u002F \u003Ccode>value\u003C\u002Fcode>）。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>方式 1：\u003Ccode>values\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"deviceId\": \"device1\",\n  \"time\": 1753843649,\n  \"values\": {\n    \"AI00E101\": 1,\n    \"DI00E101\": false\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>方式 2：\u003Ccode>updates\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"deviceId\": \"device1\",\n  \"time\": 1753843649,\n  \"updates\": {\n    \"AI00E101\": { \"status\": \"ok\", \"value\": 1 }\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>鍵為介面位址 \u003Ccode>addr\u003C\u002Fcode>，與 \u003Cstrong>GET \u002Finterfaces\u003C\u002Fstrong> 回傳之 \u003Ccode>addr\u003C\u002Fcode> 一致；與週邊、通道的對應請於設備上依 \u003Cstrong>§2.4\u003C\u002Fstrong> 畫面查閱。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"section-20\">2.4 工程模式／週邊資訊：位址對應週邊\u003C\u002Fh3>\n\u003Cp>介面值上報（\u003Ccode>values\u003C\u002Fcode> \u002F \u003Ccode>updates\u003C\u002Fcode>）的\u003Cstrong>鍵名\u003C\u002Fstrong>必須為系統定義之介面位址。請於設備選單進入 \u003Cstrong>工程模式\u003C\u002Fstrong> &gt; \u003Cstrong>週邊資訊\u003C\u002Fstrong>（實際選單名稱以韌體為準），畫面上會列出週邊與介面位址對照，例如 \u003Ccode>AI00101\u003C\u002Fcode>、\u003Ccode>DI00101\u003C\u002Fcode>、\u003Ccode>DO00101\u003C\u002Fcode> 或門禁／電子鎖相關位址。\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002F%E5%B7%A5%E7%A8%8B%E6%A8%A1%E5%BC%8F-%E9%80%B1%E9%82%8A%E8%B3%87%E8%A8%8A-%E4%BD%8D%E5%9D%80%E5%B0%8D%E7%85%A7.png\" alt=\"工程模式／週邊資訊：位址對應週邊\">\u003C\u002Fp>\n\u003Cp>將此處查到的 \u003Cstrong>addr\u003C\u002Fstrong> 作為 JSON 內的鍵，即可與 \u003Cstrong>GET \u002Finterfaces\u003C\u002Fstrong> 及主機端介面資料對齊。\u003C\u002Fp>\n\u003Ch3 id=\"section-21\">2.5 使用 Mockoon 模擬主機（本機接收）\u003C\u002Fh3>\n\u003Cp>在尚無實體主機或需本機驗證時，可用 \u003Ca rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fmockoon.com\u002F\">Mockoon\u003C\u002Fa> 在本機模擬接收端，驗證\u003Cstrong>路徑、HTTP 方法、Request Body\u003C\u002Fstrong> 與 \u003Cstrong>Logs\u003C\u002Fstrong>。本節僅設定固定回應，不驗證 JWT 簽章或有效期限；可另外用 Rules 模擬 401，但這不等於完整的認證驗證。\u003C\u002Fp>\n\u003Ch4 id=\"section-22\">2.5.1 操作步驟摘要\u003C\u002Fh4>\n\u003Col>\n\u003Cli>安裝 Mockoon，新增 Environment（例：\u003Cstrong>Demo API\u003C\u002Fstrong>）。\u003C\u002Fli>\n\u003Cli>讓 Mockoon 監聽設備可連線的網路介面，例如 \u003Ccode>0.0.0.0:3000\u003C\u002Fcode>，並允許測試網路連入。設備的 \u003Ccode>host.ip\u003C\u002Fcode> 填該電腦的區域網路 IP（例如 \u003Ccode>192.168.1.100\u003C\u002Fcode>），\u003Ccode>host.port\u003C\u002Fcode> 填 \u003Ccode>3000\u003C\u002Fcode>；不可填 \u003Ccode>0.0.0.0\u003C\u002Fcode> 或 \u003Ccode>localhost\u003C\u002Fcode>。上報協定須與接收端一致；若韌體使用 HTTPS，需啟用 Mockoon 的 HTTPS 並確認設備接受其憑證，僅改成埠 \u003Ccode>443\u003C\u002Fcode> 不會啟用 TLS。\u003C\u002Fli>\n\u003Cli>新增三條 \u003Cstrong>POST\u003C\u002Fstrong> Route，路徑須與設備 \u003Ccode>host\u003C\u002Fcode> 內設定的 \u003Ccode>eventUrl\u003C\u002Fcode>、\u003Ccode>pingUrl\u003C\u002Fcode>、\u003Ccode>ifaceUrl\u003C\u002Fcode> \u003Cstrong>完全一致\u003C\u002Fstrong>（本文件範例如下表）。\u003C\u002Fli>\n\u003Cli>各 Route 的 Response 可先設 \u003Cstrong>HTTP 200\u003C\u002Fstrong>，Body 建議使用本文件 \u003Cstrong>§2.1～2.3\u003C\u002Fstrong> 所列主機建議格式：\u003Ccode>{\"success\": true}\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>將設備或測試程式的 \u003Ccode>host.ip\u003C\u002Fcode>、\u003Ccode>host.port\u003C\u002Fcode> 指向 Mockoon；送出請求後於 Mockoon \u003Cstrong>Logs\u003C\u002Fstrong> 檢查是否 \u003Cstrong>200\u003C\u002Fstrong> 與 Body 內容。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>用途\u003C\u002Fth>\n\u003Cth>POST 路徑（範例）\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>事件\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fhistory\u002Fevents\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Ping\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fdevices\u002Fping\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>介面值\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fapi\u002Fdevice\u002Finterfaces\u002Fvalues\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>注意：\u003C\u002Fstrong> Environment \u003Cstrong>Settings\u003C\u002Fstrong> 若設定了 \u003Cstrong>Route prefix\u003C\u002Fstrong>，實際 URL = \u003Ccode>prefix + 路徑\u003C\u002Fcode>。請勿讓 prefix 與 \u003Ccode>host\u003C\u002Fcode> 內路徑\u003Cstrong>重複拼接\u003C\u002Fstrong>導致 \u003Cstrong>404\u003C\u002Fstrong>；請核對路徑是否與上表及設備設定完全一致。\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fmockoon-environment-routes.png\" alt=\"Mockoon 環境與路由列表\">\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fmockoon-routes-list.png\" alt=\"三條 POST 路由列表\">\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fmockoon-route-history-events-200.png\" alt=\"事件路由設定範例（200）\">\u003C\u002Fp>\n\u003Ch4 id=\"section-23\">2.5.2 Logs 除錯\u003C\u002Fh4>\n\u003Cp>於 Mockoon 開啟 \u003Cstrong>Logs\u003C\u002Fstrong>，可檢視每次 POST 的 URL、標頭與 JSON。\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fmockoon-logs-history-events.png\" alt=\"Logs：歷史事件請求\">\u003C\u002Fp>\n\u003Cp>若回應 \u003Cstrong>404\u003C\u002Fstrong>，請依序核對：是否為 \u003Cstrong>POST\u003C\u002Fstrong>、路徑是否與設備設定相同、\u003Ccode>ifaceUrl\u003C\u002Fcode> 是否含 \u003Cstrong>\u003Ccode>\u002Fvalues\u003C\u002Fcode>\u003C\u002Fstrong> 等尾段、prefix 是否重複。\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmanual\u002FCustom-Elock\u002Fmedia\u002Fproducts\u002FCustom-Elock\u002Fmedia\u002Fmockoon-logs-404-example.png\" alt=\"Logs：404 範例\">\u003C\u002Fp>\n\u003Cp>截圖中的 IP、埠及路徑僅為示例；實際連線以本節步驟及設備的 \u003Ccode>host\u003C\u002Fcode> 設定為準。\u003C\u002Fp>\n\u003Ch2 id=\"section-24\">3. GET \u002Finterfaces（hwctrl）\u003C\u002Fh2>\n\u003Ch3 id=\"section-25\">3.1 用途\u003C\u002Fh3>\n\u003Cp>取得設備上\u003Cstrong>所有介面\u003C\u002Fstrong>之即時列表：位址、狀態、目前值、閾值相關參數（如 AI）。整合時可用來對照主動上報 \u003Ccode>values\u003C\u002Fcode> \u002F \u003Ccode>updates\u003C\u002Fcode> 的鍵名，或顯示相關介面狀態。\u003C\u002Fp>\n\u003Ch3 id=\"section-26\">3.2 經統一入口呼叫\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>轉發 JSON（Body）\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"session\": \"trace-001\",\n  \"serviceName\": \"hwctrl\",\n  \"url\": \"\u002Finterfaces\",\n  \"method\": \"GET\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>回傳 \u003Ccode>body\u003C\u002Fcode> 結構\u003C\u002Fstrong>（陣列；常見欄位如下）\u003C\u002Fp>\n\u003Cp>實際欄位依機種／設定可能增減，常見如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[\n  {\n    \"addr\": \"AI009C1\",\n    \"status\": \"ok\",\n    \"value\": 220.5,\n    \"params\": {\n      \"hc\": 260,\n      \"hw\": 250,\n      \"lc\": 180,\n      \"lw\": 190\n    }\n  }\n]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>addr\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>介面位址（與 iface 上報等共用）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>status\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>介面狀態字串（如 \u003Ccode>ok\u003C\u002Fcode>、\u003Ccode>hw\u003C\u002Fcode>、\u003Ccode>hc\u003C\u002Fcode> 等；詳見產品介面狀態說明）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>value\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>目前值（可為數值、布林或字串，依介面型別）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>params\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>介面參數；AI 的 \u003Ccode>hc\u003C\u002Fcode>／\u003Ccode>hw\u003C\u002Fcode> 為過高異常／警告值，\u003Ccode>lc\u003C\u002Fcode>／\u003Ccode>lw\u003C\u002Fcode> 為過低異常／警告值。範例為類比量測，不代表電子鎖的固定參數。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-27\">3.3 curl 範例（Bash）\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>curl -k -sS -X POST \"https:\u002F\u002F${DEVICE_IP}\u002Fapp-token\u002Frestful-api\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer ${ACCESS_TOKEN}\" \\\n  -d '{\n    \"session\":\"trace-001\",\n    \"serviceName\":\"hwctrl\",\n    \"url\":\"\u002Finterfaces\",\n    \"method\":\"GET\"\n  }'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"section-28\">3.4 相關 API（選用）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>路徑\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Finterfaces\u002Falarms\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>告警筆數彙總（\u003Ccode>warnings\u003C\u002Fcode> \u002F \u003Ccode>critical\u003C\u002Fcode> \u002F \u003Ccode>total\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Finterfaces\u002Falarms\u002F{kind}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>kind\u003C\u002Fcode> = \u003Ccode>warnings\u003C\u002Fcode> 或 \u003Ccode>critical\u003C\u002Fcode> 之明細列表\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>統一入口實測\u003C\u002Fstrong>：上述介面列表、告警彙總、\u003Ccode>warnings\u003C\u002Fcode> 及 \u003Ccode>critical\u003C\u002Fcode> 明細，已使用應用程式 \u003Ccode>accessToken\u003C\u002Fcode> 經 \u003Ccode>restful-api\u003C\u002Fcode> 回傳 HTTP 200。介面列表的 \u003Ccode>body\u003C\u002Fcode> 為陣列；告警明細的 \u003Ccode>body\u003C\u002Fcode> 包含 \u003Ccode>count\u003C\u002Fcode> 與 \u003Ccode>items\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch2 id=\"section-29\">4. 事件記錄（history \u002F logs）\u003C\u002Fh2>\n\u003Ch3 id=\"section-30\">4.1 GET \u002Flogs — 依時間查詢\u003C\u002Fh3>\n\u003Cp>依時間區間與篩選條件查詢\u003Cstrong>歷史事件／紀錄\u003C\u002Fstrong>（含先前上報並由設備保存之事件）。搭配 \u003Ccode>template\u003C\u002Fcode>、\u003Ccode>args\u003C\u002Fcode> 與 \u003Cstrong>§5\u003C\u002Fstrong> 語系表，可組出與畫面一致的中英文訊息。\u003C\u002Fp>\n\u003Ch3 id=\"section-31\">4.2 完整 URL（query）\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>\u002Flogs?startTime={startTime}&amp;endTime={endTime}&amp;level={level}&amp;offset={offset}&amp;limit={limit}&amp;name={name}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"section-32\">4.3 查詢參數\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>參數\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>startTime\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>起始時間，Unix 秒。此版本使用完整參數名，不是 \u003Ccode>start\u003C\u002Fcode>。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>endTime\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>結束時間，Unix 秒。此版本使用完整參數名，不是 \u003Ccode>end\u003C\u002Fcode>；邊界是否含當秒仍需確認。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>level\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>紀錄等級篩選，例如 \u003Ccode>3\u003C\u002Fcode>；查詢全部等級時省略。\u003Ccode>0\u003C\u002Fcode> 不代表全部等級。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>offset\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>分頁偏移\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>limit\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>每頁筆數\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>iName\u003C\u002Fcode> 過濾（選用）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-33\">4.4 經統一入口呼叫\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>轉發 JSON（Body）\u003C\u002Fstrong>：請將查詢時間替換成實際區間。建置版本 \u003Ccode>202609172144\u003C\u002Fcode> 的 Web 代理查詢已確認使用 \u003Ccode>startTime\u003C\u002Fcode>／\u003Ccode>endTime\u003C\u002Fcode>（Unix 秒）；原先的 \u003Ccode>start\u003C\u002Fcode>／\u003Ccode>end\u003C\u002Fcode> 未生效，會得到未依指定時間篩選的資料。下例省略 \u003Ccode>level\u003C\u002Fcode> 與 \u003Ccode>name\u003C\u002Fcode>，表示不指定這兩項篩選。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"session\": \"trace-002\",\n  \"serviceName\": \"history\",\n  \"url\": \"\u002Flogs?startTime=1700000000&amp;endTime=1700086400&amp;offset=0&amp;limit=50\",\n  \"method\": \"GET\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>回傳 \u003Ccode>body\u003C\u002Fcode> 範例\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"total\": 1,\n  \"offset\": 0,\n  \"info\": 1,\n  \"ok\": 0,\n  \"warn\": 0,\n  \"critical\": 0,\n  \"columns\": [\"seq\", \"time\", \"level\", \"username\", \"template\", \"args\", \"alarmSeries\"],\n  \"data\": [\n    {\n      \"seq\": 1001,\n      \"time\": 1700050000,\n      \"level\": 3,\n      \"username\": \"system\",\n      \"template\": \"elockCardUnlock\",\n      \"args\": {\"pName\": \"門禁1\", \"iValue\": \"1234567890\"}\n    }\n  ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>total\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>符合條件之總筆數\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>offset\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>本次偏移\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>info\u003C\u002Fcode> \u002F \u003Ccode>ok\u003C\u002Fcode> \u002F \u003Ccode>warn\u003C\u002Fcode> \u002F \u003Ccode>critical\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>各等級筆數統計（依服務實作）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>columns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>可用資料欄位清單；即使包含 \u003Ccode>alarmSeries\u003C\u002Fcode>，無趨勢資料的事件列仍可能省略該欄位。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>data\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>紀錄列；含 \u003Cstrong>seq\u003C\u002Fstrong>、\u003Cstrong>username\u003C\u002Fstrong>、選用 \u003Cstrong>alarmSeries\u003C\u002Fstrong>（與 \u003Cstrong>§2.1\u003C\u002Fstrong> 主動上送相同）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>data[].time\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>事件時間，Unix 秒；此版本 \u003Ccode>\u002Flogs\u002Fsync\u003C\u002Fcode> 的事件時間則為毫秒，兩個 API 不可直接共用單位假設。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>data[].args\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>此版本 \u003Ccode>\u002Flogs\u003C\u002Fcode> 回傳 JSON 物件；\u003Ccode>\u002Flogs\u002Fsync\u003C\u002Fcode> 回傳 JSON 字串，需要先解析。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>alarmSeries\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>選用的告警趨勢陣列，元素含 \u003Ccode>time\u003C\u002Fcode>、\u003Ccode>value\u003C\u002Fcode>；本節卡號開鎖範例不含此欄位。時間單位須依目標韌體確認。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-34\">4.5 curl 範例（Bash）\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>START=1700000000\nEND=1700086400\ncurl -k -sS -X POST \"https:\u002F\u002F${DEVICE_IP}\u002Fapp-token\u002Frestful-api\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer ${ACCESS_TOKEN}\" \\\n  -d \"{\n    \\\"session\\\":\\\"trace-002\\\",\n    \\\"serviceName\\\":\\\"history\\\",\n    \\\"url\\\":\\\"\u002Flogs?startTime=${START}&amp;endTime=${END}&amp;offset=0&amp;limit=20\\\",\n    \\\"method\\\":\\\"GET\\\"\n  }\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"section-35\">4.6 與主動事件的關係\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>主動 \u003Cstrong>POST 事件\u003C\u002Fstrong>（\u003Cstrong>§2.1\u003C\u002Fstrong>）與 \u003Cstrong>GET \u002Flogs\u003C\u002Fstrong>／\u003Cstrong>GET \u002Flogs\u002Fsync\u003C\u002Fstrong> 應保留一致的事件模板與參數內容；此版本 \u003Ccode>\u002Flogs\u003C\u002Fcode> 與 \u003Ccode>\u002Flogs\u002Fsync\u003C\u002Fcode> 的時間單位及 \u003Ccode>args\u003C\u002Fcode> 格式不同，主機需先正規化。若有 \u003Ccode>alarmSeries\u003C\u002Fcode>，也應保存其內容並確認時間單位。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>GET \u002Flogs\u002Fsync\u003C\u002Fstrong> 另回傳依 \u003Cstrong>lang\u003C\u002Fstrong> 組好之 \u003Cstrong>msg\u003C\u002Fstrong>（\u003Cstrong>§4.8\u003C\u002Fstrong>）。\u003C\u002Fli>\n\u003Cli>顯示語系可搭配 \u003Cstrong>GET\u002FPATCH \u003Ccode>\u002Fconfig\u002Fnotify-lang\u003C\u002Fcode>\u003C\u002Fstrong> 取得或設定通知語系。已實測一般登入後 \u003Ccode>GET \u002Fapi\u002Fhistory\u002Fconfig\u002Fnotify-lang\u003C\u002Fcode> 回傳 HTTP 200，內容為 \u003Ccode>{\"lang\":\"zh-TW\"}\u003C\u002Fcode>；\u003Ccode>\u002Fapi\u002Fsysctrl\u002Fconfig\u002Fnotify-lang\u003C\u002Fcode> 回傳 404。因此此設備使用 \u003Ccode>history\u003C\u002Fcode> 服務。此次未測試 PATCH，亦未變更語系。本節補同步請求使用 \u003Ccode>lang=zh-hant\u003C\u002Fcode> 已確認可回應 200。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"section-36\">4.7 GET \u002Flogs\u002Fmax-seq — 設備最大 seq（主機補件）\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>用途\u003C\u002Fstrong>：主機得知設備事件庫目前\u003Cstrong>最後一筆 \u003Ccode>seq\u003C\u002Fcode>\u003C\u002Fstrong>，以決定 \u003Ccode>GET \u002Flogs\u002Fsync\u003C\u002Fcode> 的 \u003Ccode>toSeq\u003C\u002Fcode> 或判斷是否尚有未同步紀錄。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002Flogs\u002Fmax-seq\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>經統一入口\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"session\": \"trace-003\",\n  \"serviceName\": \"history\",\n  \"url\": \"\u002Flogs\u002Fmax-seq\",\n  \"method\": \"GET\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>回傳 \u003Ccode>body\u003C\u002Fcode> 範例\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"maxSeq\": 5230\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>欄位\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>maxSeq\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>設備最新事件 \u003Ccode>seq\u003C\u002Fcode>；無事件時為 \u003Cstrong>0\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-37\">4.8 GET \u002Flogs\u002Fsync — 依 seq 區間補足缺失（主機）\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>用途\u003C\u002Fstrong>：\u003Cstrong>主要提供給主機補足缺失的事件記錄\u003C\u002Fstrong>。主機保存已連續同步之 \u003Ccode>syncSeq\u003C\u002Fcode>，先 \u003Cstrong>§4.7\u003C\u002Fstrong> 取得 \u003Ccode>maxSeq\u003C\u002Fcode>，再依區間分批拉回（單次最多 \u003Cstrong>100\u003C\u002Fstrong> 筆）。中間 seq 不連續時，對缺口另行指定 \u003Ccode>fromSeq\u003C\u002Fcode>／\u003Ccode>toSeq\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002Flogs\u002Fsync?fromSeq={fromSeq}&amp;toSeq={toSeq}&amp;lang={lang}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>參數\u003C\u002Fth>\n\u003Cth>必填\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>fromSeq\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>起始 seq（含）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>toSeq\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>結束 seq（含）；\u003Ccode>toSeq &gt;= fromSeq\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lang\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>是\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>zh-hant\u003C\u002Fcode> 或 \u003Ccode>en-us\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>經統一入口範例\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"session\": \"trace-004\",\n  \"serviceName\": \"history\",\n  \"url\": \"\u002Flogs\u002Fsync?fromSeq=1001&amp;toSeq=1001&amp;lang=zh-hant\",\n  \"method\": \"GET\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>回傳 \u003Ccode>body\u003C\u002Fcode> 範例\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>此版本的 \u003Ccode>data[].time\u003C\u002Fcode> 為 Unix 毫秒，\u003Ccode>data[].args\u003C\u002Fcode> 為 JSON 字串。以下 \u003Ccode>1700050000000\u003C\u002Fcode> 毫秒對應 §4.4 的 \u003Ccode>1700050000\u003C\u002Fcode> 秒，均為示例時間。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"fromSeq\": 1001,\n  \"toSeq\": 1001,\n  \"count\": 1,\n  \"maxCount\": 100,\n  \"deviceId\": \"device1\",\n  \"columns\": [\"seq\", \"time\", \"level\", \"username\", \"template\", \"args\", \"alarmSeries\", \"msg\"],\n  \"data\": [\n    {\n      \"seq\": 1001,\n      \"time\": 1700050000000,\n      \"level\": 3,\n      \"username\": \"system\",\n      \"template\": \"elockCardUnlock\",\n      \"args\": \"{\\\"pName\\\":\\\"門禁1\\\",\\\"iValue\\\":\\\"1234567890\\\"}\",\n      \"msg\": \"[門禁1] 卡號 [1234567890] 開鎖\"\n    }\n  ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>建議流程\u003C\u002Fstrong>：\u003Ccode>syncSeq\u003C\u002Fcode> → \u003Ccode>GET \u002Flogs\u002Fmax-seq\u003C\u002Fcode> → 若 \u003Ccode>syncSeq &lt; maxSeq\u003C\u002Fcode> 則分批 \u003Ccode>GET \u002Flogs\u002Fsync\u003C\u002Fcode>（例：\u003Ccode>fromSeq=syncSeq+1\u003C\u002Fcode>，\u003Ccode>toSeq=min(syncSeq+100, maxSeq)\u003C\u002Fcode>，\u003Ccode>lang=zh-hant\u003C\u002Fcode>）→ 寫入主機並更新 \u003Ccode>syncSeq\u003C\u002Fcode>。請以 \u003Ccode>count\u003C\u002Fcode> 與 \u003Ccode>data\u003C\u002Fcode> 判斷實際收到的筆數；上例完整示範 1 筆事件，\u003Ccode>maxCount=100\u003C\u002Fcode> 表示單次上限。\u003C\u002Fp>\n\u003Ch3 id=\"section-38\">4.9 補同步與資料保留注意事項\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>主機依設備識別碼與 \u003Ccode>seq\u003C\u002Fcode> 去除重複事件，避免主動上報與補同步重複入庫。\u003C\u002Fli>\n\u003Cli>\u003Ccode>syncSeq\u003C\u002Fcode> 表示已連續同步完成的位置，不可直接以主機資料庫的最大 \u003Ccode>seq\u003C\u002Fcode> 取代；有缺口時需另行補查。\u003C\u002Fli>\n\u003Cli>設備歷史事件有容量限制；已被覆寫的事件無法經 \u003Ccode>\u002Flogs\u002Fsync\u003C\u002Fcode> 取回。區間回傳空資料時，記錄缺口並查明保留狀態，避免無限重試，也不要宣告缺口已補齊。\u003C\u002Fli>\n\u003Cli>若設備事件庫被清除或更換設備，且 \u003Ccode>maxSeq\u003C\u002Fcode> 小於原有游標，應重新確認設備識別與同步起點。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"section-39\">5. 事件模板與語系對應\u003C\u002Fh2>\n\u003Cp>以下為相關事件之模板鍵、說明、等級與訊息句式（含門禁／電子鎖等）。\u003Ccode>${xxx}\u003C\u002Fcode> 表示變數名稱；實際 JSON \u003Ccode>args\u003C\u002Fcode> 內為鍵值，請與下表變數對應。\u003C\u002Fp>\n\u003Ch3 id=\"section-40\">5.1 英文語系（English）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>template\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003Cth>level\u003C\u002Fth>\n\u003Cth>value（模板）\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>elockCardUnlock\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] card [${iValue}] unlocked\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardSuccess\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號驗證開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] card [${iValue}] verified, user: [${iAValue}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardNotFound\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號不存在\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] card [${iValue}] not found\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardExpired\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號過期\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] card [${iValue}] expired\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardNotInPeriod\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號不在時段內\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] card [${iValue}] not in period\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockUnlockByHost\u003C\u002Ftd>\n\u003Ctd>主機開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] unlocked by host, controlled by user [${username}] [${ip}] via web\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockUnlockByKey\u003C\u002Ftd>\n\u003Ctd>鑰匙開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] key unlocked\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockSetOpenTime\u003C\u002Ftd>\n\u003Ctd>設定開啟時間\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] set open time, source: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockAddCard\u003C\u002Ftd>\n\u003Ctd>新增卡號\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] add card [${iValue}], source: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockDeleteCard\u003C\u002Ftd>\n\u003Ctd>刪除卡號\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] delete card [${iValue}], source: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"section-41\">5.2 中文語系（繁體）\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>template\u003C\u002Fth>\n\u003Cth>說明\u003C\u002Fth>\n\u003Cth>level\u003C\u002Fth>\n\u003Cth>value（模板）\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>elockCardUnlock\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 卡號 [${iValue}] 開鎖\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardSuccess\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號驗證開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 卡號 [${iValue}] 驗證成功, 使用者: [${iAValue}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardNotFound\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號不存在\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] 卡號 [${iValue}] 不存在\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardExpired\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號過期\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] 卡號 [${iValue}] 過期\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockCardNotInPeriod\u003C\u002Ftd>\n\u003Ctd>電子鎖卡號不在時段內\u003C\u002Ftd>\n\u003Ctd>6\u003C\u002Ftd>\n\u003Ctd>[${pName}] 卡號 [${iValue}] 不在時段內\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockUnlockByHost\u003C\u002Ftd>\n\u003Ctd>主機開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 主機開鎖,使用者[${username}][${ip}] 由網頁操作\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockUnlockByKey\u003C\u002Ftd>\n\u003Ctd>鑰匙開鎖\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 鑰匙開鎖\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockSetOpenTime\u003C\u002Ftd>\n\u003Ctd>設定開啟時間\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 設定開啟時間, 來源: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockAddCardId\u003C\u002Ftd>\n\u003Ctd>新增卡號\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 新增卡號: [${iValue}], 來源: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>elockDeleteCardId\u003C\u002Ftd>\n\u003Ctd>刪除卡號\u003C\u002Ftd>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>[${pName}] 刪除卡號: [${iValue}], 來源: [${source}][${name}]\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>說明：\u003C\u002Fstrong> 英文表使用 \u003Ccode>elockAddCard\u003C\u002Fcode> \u002F \u003Ccode>elockDeleteCard\u003C\u002Fcode>，中文表使用 \u003Ccode>elockAddCardId\u003C\u002Fcode> \u002F \u003Ccode>elockDeleteCardId\u003C\u002Fcode>；這個差異也存在於目前的事件參考文件，尚無可核對的韌體實作。不要自行改名或假設為同一鍵；請以實機送出的 \u003Ccode>template\u003C\u002Fcode> 確認映射，遇到未知鍵先保留原始事件。\u003C\u002Fp>\n","\u002Fmanual\u002FCustom-Elock\u002FCustom-Elock-zh.md","\u002Fmanual\u002FCustom-Elock\u002FCustom-Elock-zh.pdf",1790240694993]