diff --git a/app/Console/Commands/ListenMqttQueue.php b/app/Console/Commands/ListenMqttQueue.php index 1839930..1b541f5 100644 --- a/app/Console/Commands/ListenMqttQueue.php +++ b/app/Console/Commands/ListenMqttQueue.php @@ -9,6 +9,7 @@ use App\Jobs\Machine\ProcessHeartbeat; use App\Jobs\Machine\ProcessMachineError; use App\Jobs\Machine\ProcessTransaction; use App\Jobs\Machine\ProcessStatus; +use App\Jobs\Machine\ProcessMachineEvent; use App\Jobs\Transaction\ProcessInvoice; use App\Jobs\Transaction\ProcessDispenseRecord; use App\Jobs\Machine\ProcessCommandAck; @@ -97,6 +98,9 @@ class ListenMqttQueue extends Command case 'status': ProcessStatus::dispatch($serialNo, $payload); break; + case 'event': + ProcessMachineEvent::dispatch($serialNo, $payload); + break; case 'error': ProcessMachineError::dispatch($serialNo, $payload); break; diff --git a/app/Jobs/Machine/ProcessMachineEvent.php b/app/Jobs/Machine/ProcessMachineEvent.php new file mode 100644 index 0000000..b6f0535 --- /dev/null +++ b/app/Jobs/Machine/ProcessMachineEvent.php @@ -0,0 +1,59 @@ +serialNo = $serialNo; + $this->payload = $payload; + } + + /** + * Execute the job. + */ + public function handle(): void + { + $machine = Machine::withoutGlobalScopes()->where('serial_no', $this->serialNo)->first(); + + if (!$machine) { + Log::warning("ProcessMachineEvent: Machine not found [{$this->serialNo}]"); + return; + } + + $event = $this->payload['event'] ?? null; + + if (!$event) { + Log::warning("ProcessMachineEvent: Missing event in payload", ['payload' => $this->payload]); + return; + } + + // 寫入機台狀態日誌,type 為 'status' 以便正確歸類顯示於「機台狀態」日誌中 + $machine->logs()->create([ + 'company_id' => $machine->company_id, + 'type' => 'status', // 忠實呈現於機台狀態中 + 'level' => 'info', + 'message' => $event, // 例如 "fanon" 或 "fanoff" + 'context' => $this->payload, + ]); + + Log::info("ProcessMachineEvent: Machine [{$machine->serial_no}] recorded event [{$event}] to status logs"); + } +} diff --git a/app/Services/Machine/MachineService.php b/app/Services/Machine/MachineService.php index d11a05f..ba43106 100644 --- a/app/Services/Machine/MachineService.php +++ b/app/Services/Machine/MachineService.php @@ -92,15 +92,34 @@ class MachineService // ═══════════════════════════════════════════════════════════════ // 貨道與馬達狀態類 (Prefix: 02 - SLOT_STATUS) // ═══════════════════════════════════════════════════════════════ - '0201' => ['label' => 'Slot normal', 'level' => 'info'], - '0202' => ['label' => 'Product empty', 'level' => 'warning'], - '0203' => ['label' => 'Slot empty', 'level' => 'warning'], - '0205' => ['label' => 'Slot sensor blocked', 'level' => 'warning'], - '0206' => ['label' => 'Slot not closed', 'level' => 'warning'], - '0207' => ['label' => 'Slot motor error (0207)', 'level' => 'error'], - '0208' => ['label' => 'Slot motor error (0208)', 'level' => 'error'], - '0209' => ['label' => 'Slot motor error (0209)', 'level' => 'error'], - '0212' => ['label' => 'Hopper empty (0212)', 'level' => 'warning'], + '0201' => ['label' => 'Slot normal', 'level' => 'info'], // 貨道正常 + '0202' => ['label' => 'Slot out of stock', 'level' => 'warning'], // 貨道缺貨 + '0203' => ['label' => 'Slot does not exist', 'level' => 'warning'], // 貨道不存在 + '0204' => ['label' => 'Slot suspended', 'level' => 'warning'], // 貨道暫停使用 + '0205' => ['label' => 'Elevator contains items', 'level' => 'warning'], // 升降台裡面有物品 + '0206' => ['label' => 'Pickup door not closed', 'level' => 'warning'], // 取貨口門沒關上 + '0207' => ['label' => 'Elevator failure (0207)', 'level' => 'error'], // 升降機故障 + '0208' => ['label' => 'Elevator self-check error', 'level' => 'error'], // 升降機自檢錯誤 + '0209' => ['label' => 'Microwave pickup door close error (0209)', 'level' => 'error'], // 微波爐取貨口門關閉錯誤 + '020B' => ['label' => 'Machine temperature exceeds limit', 'level' => 'warning'], // 機器超過設定溫度,暫停購買 + '020C' => ['label' => 'Bento machine cooling water tank empty', 'level' => 'error'], // 盒飯機冷卻水箱缺水 + '020D' => ['label' => 'Age verification required', 'level' => 'warning'], // 貨道需要年齡驗證 + '020E' => ['label' => 'Water level too low', 'level' => 'warning'], // 水量過低 + '020F' => ['label' => 'Weight sensor communication error', 'level' => 'error'], // 重量傳感器通訊錯誤 + '0210' => ['label' => 'Microwave delivery door open error (0210)', 'level' => 'error'],// 微波爐進貨口門打開錯誤 + '0211' => ['label' => 'Microwave delivery door close error (0211)', 'level' => 'error'],// 微波爐進貨口門關閉錯誤 + '0212' => ['label' => 'Bento not detected', 'level' => 'warning'], // 沒檢測到盒飯 + '0213' => ['label' => 'Bento heating', 'level' => 'info'], // 盒飯正在加熱 + '0214' => ['label' => 'Microwave pickup door open error (0214)', 'level' => 'error'], // 微波爐取貨口門打開錯誤 + '0215' => ['label' => 'Please remove bento from microwave', 'level' => 'warning'], // 請取出微波爐內盒飯 + '0216' => ['label' => 'Support rod return error', 'level' => 'error'], // 撐桿回位錯誤 + '0217' => ['label' => 'Main motor failure', 'level' => 'error'], // 主電機故障 + '0218' => ['label' => 'Translation motor failure', 'level' => 'error'], // 平移電機故障 + '0219' => ['label' => 'Support rod push error', 'level' => 'error'], // 撐桿推出錯誤 + '0220' => ['label' => 'Elevator enter microwave error (0220)', 'level' => 'error'], // 升降台進去微波爐錯誤 + '0221' => ['label' => 'Elevator exit microwave error (0221)', 'level' => 'error'], // 升降台出去微波爐錯誤 + '0222' => ['label' => 'Microwave push rod push error (0222)', 'level' => 'error'], // 微波爐內推桿推出錯誤 + '0223' => ['label' => 'Microwave push rod retract error (0223)', 'level' => 'error'], // 微波爐內推桿收回錯誤 // ═══════════════════════════════════════════════════════════════ // 機台整體狀態類 (Prefix: 54 - MACHINE_STATUS) diff --git a/config/api-docs.php b/config/api-docs.php index d0e24c4..190c65a 100644 --- a/config/api-docs.php +++ b/config/api-docs.php @@ -534,12 +534,26 @@ return [ 'qos' => 0, 'description' => '用於機台連線與斷線的即時狀態同步。通常用於 MQTT 的遺囑訊息 (LWT) 設定,或由 Broker 連線事件觸發。', 'payload_parameters' => [ - 'status' => ['type' => 'string', 'description' => '連線狀態。接受值:online, offline'], + 'status' => ['type' => 'string', 'description' => '連線狀態。接受值:online, offline, restarting'], ], 'payload_example' => [ 'status' => 'online' ], ], + [ + 'name' => '機台硬體事件上報 (Event)', + 'slug' => 'mqtt-event', + 'action' => 'PUB', + 'topic' => 'machine/{serial_no}/event', + 'qos' => 1, + 'description' => '用於機台上報各種獨立的硬體運行與物理事件。後台收到後會直接寫入機台狀態日誌中並進行多語系翻譯。', + 'payload_parameters' => [ + 'event' => ['type' => 'string', 'description' => '事件識別碼。例如:fanon (風扇開), fanoff (風扇關) 等。'], + ], + 'payload_example' => [ + 'event' => 'fanon' + ], + ], [ 'name' => '機台異常上報 (Error)', 'slug' => 'mqtt-error', diff --git a/lang/en.json b/lang/en.json index 4f4ce76..0e8263f 100644 --- a/lang/en.json +++ b/lang/en.json @@ -91,6 +91,7 @@ "Affiliated Unit": "Affiliated Unit", "Affiliation": "Affiliation", "After Qty": "After Qty", + "Age verification required": "Age verification required", "Alert Severity Levels": "Alert Severity Levels", "Alert Summary": "Alert Summary", "Alert Switch": "Alert Switch", @@ -220,6 +221,9 @@ "Before Qty": "Before Qty", "Belongs To": "Belongs To", "Belongs To Company": "Belongs To Company", + "Bento heating": "Bento heating", + "Bento machine cooling water tank empty": "Bento machine cooling water tank low water", + "Bento not detected": "Bento not detected", "Bill Acceptor": "Bill Acceptor", "Bracelet drop not detected": "Bracelet drop not detected", "Bracelet scan failed": "Bracelet scan failed", @@ -590,13 +594,18 @@ "Electronic Invoice": "Electronic Invoice", "Electronic Invoices": "Electronic Invoices", "Elevator belt self-check error": "Elevator belt self-check error", + "Elevator contains items": "Elevator contains items", "Elevator descending": "Elevator descending", "Elevator descent error": "Elevator descent error", "Elevator enter microwave error": "Elevator enter microwave error", + "Elevator enter microwave error (0220)": "Elevator enter microwave error (0220)", "Elevator exit microwave error": "Elevator exit microwave error", + "Elevator exit microwave error (0221)": "Elevator exit microwave error (0221)", "Elevator failure": "Elevator failure", + "Elevator failure (0207)": "Elevator failure (0207)", "Elevator rise error": "Elevator rise error", "Elevator rising": "Elevator rising", + "Elevator self-check error": "Elevator self-check error", "Elevator sensor error": "Elevator sensor error", "Elevator support rod push error": "Elevator support rod push error", "Elevator support rod return error": "Elevator support rod return error", @@ -1014,6 +1023,7 @@ "Machine not found": "Machine not found", "Machine permissions updated successfully.": "Machine permissions updated successfully.", "Machine settings updated successfully.": "Machine settings updated successfully.", + "Machine temperature exceeds limit": "Machine temperature exceeds limit, purchase suspended", "Machine to Warehouse": "Machine to Warehouse", "Machine to Warehouse Return": "Machine to Warehouse Return", "Machine to warehouse returns": "Machine to warehouse returns", @@ -1023,6 +1033,7 @@ "Machines Online": "Machines Online", "Main": "Main", "Main Warehouses": "Main Warehouses", + "Main motor failure": "Main motor failure", "Maintenance": "Maintenance", "Maintenance Content": "Maintenance Content", "Maintenance Date": "Maintenance Date", @@ -1102,17 +1113,23 @@ "Message Content": "Message Content", "Message Display": "Message Display", "Microwave delivery door close error": "Microwave delivery door close error", + "Microwave delivery door close error (0211)": "Microwave delivery door close error (0211)", "Microwave delivery door closing": "Microwave delivery door closing", "Microwave delivery door open error": "Microwave delivery door open error", + "Microwave delivery door open error (0210)": "Microwave delivery door open error (0210)", "Microwave delivery door opening": "Microwave delivery door opening", "Microwave door error": "Microwave door error", "Microwave door opened": "Microwave door opened", "Microwave pickup door close error": "Microwave pickup door close error", + "Microwave pickup door close error (0209)": "Microwave pickup door close error (0209)", "Microwave pickup door closing": "Microwave pickup door closing", "Microwave pickup door open error": "Microwave pickup door open error", + "Microwave pickup door open error (0214)": "Microwave pickup door open error (0214)", "Microwave pickup door opening": "Microwave pickup door opening", "Microwave push rod push error": "Microwave push rod push error", + "Microwave push rod push error (0222)": "Microwave push rod push error (0222)", "Microwave push rod retract error": "Microwave push rod retract error", + "Microwave push rod retract error (0223)": "Microwave push rod retract error (0223)", "Milk dispense timeout": "Milk dispense timeout", "Min 8 characters": "Min 8 characters", "Model": "Model", @@ -1427,6 +1444,7 @@ "Please enter version name": "Please enter version name", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.", "Please provide a download URL": "Please provide a download URL", + "Please remove bento from microwave": "Please remove bento from microwave", "Please select a company": "Please select a company", "Please select a company.": "Please select a company.", "Please select a machine": "Please select a machine", @@ -1773,6 +1791,7 @@ "Slot No": "Slot No", "Slot Status": "Slot Status", "Slot Test": "Slot Test", + "Slot does not exist": "Slot does not exist", "Slot empty": "Slot empty", "Slot jammed": "Slot jammed", "Slot motor error (0207)": "Slot motor error (0207)", @@ -1781,8 +1800,10 @@ "Slot normal": "Slot normal", "Slot not closed": "Slot not closed", "Slot not found": "Slot not found", + "Slot out of stock": "Slot out of stock", "Slot report synchronized success": "Slot report synchronized success", "Slot sensor blocked": "Slot sensor blocked", + "Slot suspended": "Slot suspended", "Slot updated successfully.": "Slot updated successfully.", "Slots": "Slots", "Slots need replenishment": "Slots need replenishment", @@ -1881,6 +1902,8 @@ "Superseded by new adjustment": "Superseded by new adjustment", "Superseded by new command": "Superseded by new command", "Superseded by new command (Timeout)": "Superseded by new command (Timeout)", + "Support rod push error": "Support rod push error", + "Support rod return error": "Support rod return error", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.", "Survey Analysis": "Survey Analysis", "Sync Ads": "Sync Ads", @@ -2020,6 +2043,7 @@ "Transfer order status tracking": "Transfer order status tracking", "Transfer out": "Transfer out", "Transfers": "Transfers", + "Translation motor failure": "Translation motor failure", "Trigger": "Trigger", "Trigger Dispense": "Trigger Dispense", "Trigger Remote Dispense": "Trigger Remote Dispense", @@ -2161,8 +2185,10 @@ "Warranty End": "Warranty End", "Warranty Service": "Warranty Service", "Warranty Start": "Warranty Start", + "Water level too low": "Water level too low", "Webhook Status": "Webhook Status", "Webhook URL": "Webhook URL", + "Weight sensor communication error": "Weight sensor communication error", "Welcome Gift": "Welcome Gift", "Welcome Gift Code": "Welcome Gift Code", "Welcome Gift Code (8 Digits)": "Welcome Gift Code (8 Digits)", @@ -2250,6 +2276,8 @@ "enabled": "enabled", "error": "error", "failed": "failed", + "fanoff": "Fan turned off", + "fanon": "Fan turned on", "files selected": "files selected", "hours ago": "hours ago", "image": "image", diff --git a/lang/ja.json b/lang/ja.json index 6e5c78b..c04b0d0 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -91,6 +91,7 @@ "Affiliated Unit": "所属ユニット", "Affiliation": "所属", "After Qty": "変動後数量", + "Age verification required": "年齢認証が必要です", "Alert Severity Levels": "アラート深刻度", "Alert Summary": "アラート概要", "Alert Switch": "アラートスイッチ", @@ -220,6 +221,9 @@ "Before Qty": "変動前数量", "Belongs To": "会社名", "Belongs To Company": "所属会社", + "Bento heating": "弁当加熱中", + "Bento machine cooling water tank empty": "弁当機冷却水タンク空", + "Bento not detected": "弁当が検出されません", "Bill Acceptor": "紙幣識別機", "Bracelet drop not detected": "ブレスレット落下未検出", "Bracelet scan failed": "ブレスレットスキャン失敗", @@ -590,13 +594,18 @@ "Electronic Invoice": "電子領収書", "Electronic Invoices": "電子領収書", "Elevator belt self-check error": "エレベーターベルト自己診断エラー", + "Elevator contains items": "リフト内に商品あり", "Elevator descending": "エレベーター下降中", "Elevator descent error": "エレベーター下降エラー", "Elevator enter microwave error": "エレベーター電子レンジ進入エラー", + "Elevator enter microwave error (0220)": "リフト電子レンジ進入エラー (0220)", "Elevator exit microwave error": "エレベーター電子レンジ退出エラー", + "Elevator exit microwave error (0221)": "リフト電子レンジ退出エラー (0221)", "Elevator failure": "エレベーター故障", + "Elevator failure (0207)": "リフト故障 (0207)", "Elevator rise error": "エレベーター上昇エラー", "Elevator rising": "エレベーター上昇中", + "Elevator self-check error": "リフト自己診断エラー", "Elevator sensor error": "エレベーターセンサーエラー", "Elevator support rod push error": "エレベーター支柱押し出しエラー", "Elevator support rod return error": "エレベーター支柱復帰エラー", @@ -1014,6 +1023,7 @@ "Machine not found": "機器が見つかりません", "Machine permissions updated successfully.": "機器権限が正常に更新されました。", "Machine settings updated successfully.": "機器設定が正常に更新されました。", + "Machine temperature exceeds limit": "設定温度超過のため購入一時停止", "Machine to Warehouse": "機器から倉庫", "Machine to Warehouse Return": "自販機から倉庫への返品", "Machine to warehouse returns": "機器から倉庫への返却", @@ -1023,6 +1033,7 @@ "Machines Online": "オンライン機器", "Main": "本庫", "Main Warehouses": "本庫数", + "Main motor failure": "メインモーター故障", "Maintenance": "メンテナンス", "Maintenance Content": "メンテナンス内容", "Maintenance Date": "メンテナンス日", @@ -1102,17 +1113,23 @@ "Message Content": "メッセージ内容", "Message Display": "メッセージ表示", "Microwave delivery door close error": "電子レンジ搬入口扉閉鎖エラー", + "Microwave delivery door close error (0211)": "電子レンジ搬入口扉閉エラー (0211)", "Microwave delivery door closing": "電子レンジ搬入口扉閉鎖中", "Microwave delivery door open error": "電子レンジ搬入口扉開放エラー", + "Microwave delivery door open error (0210)": "電子レンジ搬入口扉開エラー (0210)", "Microwave delivery door opening": "電子レンジ搬入口扉開放中", "Microwave door error": "電子レンジ扉エラー", "Microwave door opened": "電子レンジ扉開放", "Microwave pickup door close error": "電子レンジ取り出し口扉閉鎖エラー", + "Microwave pickup door close error (0209)": "電子レンジ取出扉閉エラー (0209)", "Microwave pickup door closing": "電子レンジ取り出し口扉閉鎖中", "Microwave pickup door open error": "電子レンジ取り出し口扉開放エラー", + "Microwave pickup door open error (0214)": "電子レンジ取出扉開エラー (0214)", "Microwave pickup door opening": "電子レンジ取り出し口扉開放中", "Microwave push rod push error": "電子レンジ内プッシャー押し出しエラー", + "Microwave push rod push error (0222)": "電子レンジプッシュロッド押し出しエラー (0222)", "Microwave push rod retract error": "電子レンジ内プッシャー回収エラー", + "Microwave push rod retract error (0223)": "電子レンジプッシュロッド引き込みエラー (0223)", "Milk dispense timeout": "牛乳抽出タイムアウト", "Min 8 characters": "最低 8文字", "Model": "機器モデル", @@ -1412,7 +1429,7 @@ "Pickup door closed": "受取扉が閉まりました", "Pickup door closed (cart mode)": "取り出し口扉閉鎖成功", "Pickup door error": "受取扉エラー", - "Pickup door not closed": "取り出し口扉未閉鎖", + "Pickup door not closed": "取出扉が閉まっていません", "Pickup door opened (cart mode)": "取り出し口扉開放成功", "Pickup door unlocked": "取り出し口扉開錠", "Platform Operator": "プラットフォーム事業者", @@ -1427,6 +1444,7 @@ "Please enter version name": "Please enter version name", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "商品の画像やスタイル付きコンポーネントを正しく印刷するために、ブラウザの印刷設定で『背景のグラフィック』を有効にしてください。", "Please provide a download URL": "Please provide a download URL", + "Please remove bento from microwave": "電子レンジ内の弁当を取り出してください", "Please select a company": "会社を選択してください", "Please select a company.": "会社を選択してください。", "Please select a machine": "機器を選択してください", @@ -1773,6 +1791,7 @@ "Slot No": "スロット番号", "Slot Status": "スロット期限ステータス", "Slot Test": "スロットテスト", + "Slot does not exist": "チャンネルが存在しません", "Slot empty": "チャンネル在庫切れ", "Slot jammed": "商品詰まり", "Slot motor error (0207)": "チャンネルモーターエラー (0207)", @@ -1781,8 +1800,10 @@ "Slot normal": "チャンネル正常", "Slot not closed": "チャンネル未閉鎖", "Slot not found": "指定されたスロットが見つかりません", + "Slot out of stock": "チャンネル在庫切れ", "Slot report synchronized success": "スロットレポートの同期に成功しました", "Slot sensor blocked": "チャンネルセンサー遮蔽", + "Slot suspended": "チャンネル一時停止", "Slot updated successfully.": "スロットが正常に更新されました。", "Slots": "スロット数", "Slots need replenishment": "補充が必要なスロット", @@ -1881,6 +1902,8 @@ "Superseded by new adjustment": "新しい調整により上書きされました", "Superseded by new command": "新しいコマンドにより上書きされました", "Superseded by new command (Timeout)": "新しいコマンドにより上書きされました (タイムアウト)", + "Support rod push error": "サポートロッド押し出しエラー", + "Support rod return error": "サポートロッド復帰エラー", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "JPEG、PNG、SVGをサポート(最大2MB)。推奨比率:横長または正方形。", "Survey Analysis": "アンケート分析", "Sync Ads": "広告を同期", @@ -2020,6 +2043,7 @@ "Transfer order status tracking": "移動伝票ステータス追跡", "Transfer out": "移動(出)", "Transfers": "移動伝票", + "Translation motor failure": "平行移動モーター故障", "Trigger": "実行", "Trigger Dispense": "出庫トリガー", "Trigger Remote Dispense": "遠隔出庫をトリガー", @@ -2161,8 +2185,10 @@ "Warranty End": "保証終了", "Warranty Service": "保証サービス", "Warranty Start": "保証開始", + "Water level too low": "水量低下", "Webhook Status": "Webhook ステータス", "Webhook URL": "Webhook URL", + "Weight sensor communication error": "重量センサー通信エラー", "Welcome Gift": "来店プレゼント", "Welcome Gift Code": "来店プレゼントコード", "Welcome Gift Code (8 Digits)": "ウェルカムギフトコード (8桁)", @@ -2250,6 +2276,8 @@ "enabled": "有効", "error": "異常", "failed": "失敗", + "fanoff": "ファン停止", + "fanon": "ファン起動", "files selected": "個のファイルを選択しました", "hours ago": "時間前", "image": "画像", diff --git a/lang/zh_TW.json b/lang/zh_TW.json index 1fc6b22..32e077e 100644 --- a/lang/zh_TW.json +++ b/lang/zh_TW.json @@ -91,6 +91,7 @@ "Affiliated Unit": "公司名稱", "Affiliation": "所屬單位", "After Qty": "異動後數量", + "Age verification required": "貨道需要年齡驗證", "Alert Severity Levels": "告警重要級別", "Alert Summary": "告警摘要", "Alert Switch": "告警開關", @@ -220,6 +221,9 @@ "Before Qty": "異動前數量", "Belongs To": "公司名稱", "Belongs To Company": "公司名稱", + "Bento heating": "盒飯正在加熱", + "Bento machine cooling water tank empty": "盒飯機冷卻水箱缺水", + "Bento not detected": "沒檢測到盒飯", "Bill Acceptor": "紙鈔機", "Bracelet drop not detected": "沒檢測到手環掉入取貨斗", "Bracelet scan failed": "沒掃碼到手環", @@ -590,13 +594,18 @@ "Electronic Invoice": "電子發票", "Electronic Invoices": "電子發票", "Elevator belt self-check error": "昇降機皮帶自檢錯誤", + "Elevator contains items": "升降台裡面有物品", "Elevator descending": "昇降機正在下降", "Elevator descent error": "昇降機下降錯誤", "Elevator enter microwave error": "昇降台進微波爐錯誤", + "Elevator enter microwave error (0220)": "升降台進去微波爐錯誤", "Elevator exit microwave error": "昇降台出微波爐錯誤", + "Elevator exit microwave error (0221)": "升降台出去微波爐錯誤", "Elevator failure": "昇降機故障", + "Elevator failure (0207)": "升降機故障", "Elevator rise error": "昇降機上升錯誤", "Elevator rising": "昇降機正在上升", + "Elevator self-check error": "升降機自檢錯誤", "Elevator sensor error": "昇降機感測器錯誤", "Elevator support rod push error": "昇降台撐桿推出錯誤", "Elevator support rod return error": "昇降台撐桿回位錯誤", @@ -1014,6 +1023,7 @@ "Machine not found": "找不到機台", "Machine permissions updated successfully.": "機台權限已成功更新。", "Machine settings updated successfully.": "機台設定已成功更新。", + "Machine temperature exceeds limit": "機器超過設定溫度,暫停購買", "Machine to Warehouse": "機台對倉庫", "Machine to Warehouse Return": "機台退庫至倉庫", "Machine to warehouse returns": "機台退回倉庫", @@ -1023,6 +1033,7 @@ "Machines Online": "在線機台數", "Main": "總倉", "Main Warehouses": "總倉數量", + "Main motor failure": "主電機故障", "Maintenance": "保養", "Maintenance Content": "維修內容", "Maintenance Date": "維修日期", @@ -1102,17 +1113,23 @@ "Message Content": "日誌內容", "Message Display": "訊息顯示", "Microwave delivery door close error": "微波爐進貨口門關閉錯誤", + "Microwave delivery door close error (0211)": "微波爐進貨口門關閉錯誤", "Microwave delivery door closing": "正在關閉微波爐進貨口門", "Microwave delivery door open error": "微波爐進貨口門打開錯誤", + "Microwave delivery door open error (0210)": "微波爐進貨口門打開錯誤", "Microwave delivery door opening": "正在打開微波爐進貨口門", "Microwave door error": "微波爐門異常", "Microwave door opened": "微波爐門開啟", "Microwave pickup door close error": "微波爐取貨口門關閉錯誤", + "Microwave pickup door close error (0209)": "微波爐取貨口門關閉錯誤", "Microwave pickup door closing": "正在關閉微波爐取貨口門", "Microwave pickup door open error": "微波爐取貨口門打開錯誤", + "Microwave pickup door open error (0214)": "微波爐取貨口門打開錯誤", "Microwave pickup door opening": "正在打開微波爐取貨口門", "Microwave push rod push error": "微波爐內推桿推出錯誤", + "Microwave push rod push error (0222)": "微波爐內推桿推出錯誤", "Microwave push rod retract error": "微波爐內推桿收回錯誤", + "Microwave push rod retract error (0223)": "微波爐內推桿收回錯誤", "Milk dispense timeout": "按鍵出奶超時", "Min 8 characters": "至少 8 個字元", "Model": "機台型號", @@ -1427,6 +1444,7 @@ "Please enter version name": "請輸入版本名稱", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "請確保在瀏覽器列印設定中啟用「背景圖形」,以便正確列印商品圖片和樣式元件。", "Please provide a download URL": "請提供下載連結", + "Please remove bento from microwave": "請取出微波爐內盒飯", "Please select a company": "請選擇公司", "Please select a company.": "請選擇公司", "Please select a machine": "請選擇機台", @@ -1773,6 +1791,7 @@ "Slot No": "貨道編號", "Slot Status": "貨道效期", "Slot Test": "貨道測試", + "Slot does not exist": "貨道不存在", "Slot empty": "貨道缺貨", "Slot jammed": "貨道卡貨", "Slot motor error (0207)": "貨道馬達錯誤 (0207)", @@ -1781,8 +1800,10 @@ "Slot normal": "貨道正常", "Slot not closed": "貨道未關閉", "Slot not found": "找不到指定貨道", + "Slot out of stock": "貨道缺貨", "Slot report synchronized success": "貨道狀態同步成功", "Slot sensor blocked": "貨道感測器受阻", + "Slot suspended": "貨道暫停使用", "Slot updated successfully.": "貨道更新成功。", "Slots": "貨道數", "Slots need replenishment": "需要補貨的貨道", @@ -1881,6 +1902,8 @@ "Superseded by new adjustment": "此指令已由後面最新的調整所取代", "Superseded by new command": "此指令已由後面最新的指令所取代", "Superseded by new command (Timeout)": "指令逾時 (1 分鐘未回報),已被新指令覆蓋。", + "Support rod push error": "撐桿推出錯誤", + "Support rod return error": "撐桿回位錯誤", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "支援 JPEG, PNG, SVG (最大 2MB)。建議比例:橫式或正方形。", "Survey Analysis": "問卷分析", "Sync Ads": "同步廣告", @@ -2020,6 +2043,7 @@ "Transfer order status tracking": "調撥單狀態追蹤", "Transfer out": "調撥調出", "Transfers": "調撥單", + "Translation motor failure": "平移電機故障", "Trigger": "執行", "Trigger Dispense": "觸發出貨", "Trigger Remote Dispense": "觸發遠端出貨", @@ -2161,8 +2185,10 @@ "Warranty End": "保固結束", "Warranty Service": "保固服務", "Warranty Start": "保固起始", + "Water level too low": "水量過低", "Webhook Status": "Webhook 狀態", "Webhook URL": "Webhook 網址", + "Weight sensor communication error": "重量傳感器通訊錯誤", "Welcome Gift": "來店禮", "Welcome Gift Code": "來店禮代碼", "Welcome Gift Code (8 Digits)": "來店禮代碼 (8位數)", @@ -2250,6 +2276,8 @@ "enabled": "啟用", "error": "異常", "failed": "失敗", + "fanoff": "風扇關", + "fanon": "風扇開", "files selected": "個檔案已選擇", "hours ago": "小時前", "image": "圖片",