---
# System prepended metadata

title: Tuya IOT Project (Smart Plug)
tags: [IOT]

---

# Tuya IOT Project (Smart Plug)
**Tuya** 智慧插頭具備了電訊號感測和無線通訊模組，內部的 MCU (微控制單元) 會透過無線網路定期上報資料給 **Tuya Cloud**，外部裝置則可以透過 `API_KEY`、`API_SECRET`、`DEVICE_ID` 來操控物聯網裝置和索取相關資訊。

此專案即使用智慧插頭，安裝於學生宿舍洗衣機插座用以中介電源來監測其電訊號等資訊，接著後台服務器定期抓取資料用以提供網頁和 Line Bot 等查詢服務介面。

<br/>

> Visit Our Site:  ++[NSYSU Dormitory Washing Machine Service](https://weiyinghuang.com/iot/nsysu-dormitory-washing-machine-mainpage.html)++
:::spoiler _**About Tuya**_
<br/>
Tuya 是一家提供智慧家居和物聯網（IoT）解決方案的公司，他們的產品（包括智慧插頭）是基於物聯網技術設計的，能夠通過網路連接和控制設備。這類智慧插頭的運作方式結合了硬體、韌體和軟體來實現即時監控與遠端操作。以下是這類智慧插頭的運作過程大致的細節：

### 1. **硬體層：智慧插頭的結構**

智慧插頭包含多種硬體元件，來進行數據的測量和處理：

-   **微控制器（MCU）**：每個智慧插頭都有一個 MCU，它是設備的核心，負責控制插頭的開關，收集數據，並與伺服器通訊。
-   **電流感測器**：用來測量設備的電流（例如家電的耗電量）。電流感測器可以監控連接到插頭的設備耗用多少電力，並將數據傳送到 MCU。
-   **電壓感測器**：負責監測插頭的輸入電壓。
-   **功率計算單元**：基於電流和電壓的數據，計算實際消耗的功率。
-   **無線通訊模組**：通常是 Wi-Fi、藍牙或 Zigbee，負責將插頭連接到網路，讓用戶能透過手機應用程式或其他平台遠程控制插頭。

### 2. **韌體層：智慧插頭內的控制程式**

-   **控制邏輯**：智慧插頭內建有韌體（內部軟體），負責處理所有感測器數據，並對插頭進行實時控制。它會執行插頭的核心功能，比如通過感應電流來開關插座。
-   **狀態上報**：插頭會持續或週期性地將數據發送到 Tuya 的雲端伺服器（例如電流、功率、設備狀態等）。
-   **指令處理**：當用戶通過手機應用程式或其他平台發送指令（例如開啟或關閉插頭）時，這些指令會經由網路傳送到插頭的 MCU，然後插頭會執行相應的動作。

### 3. **雲端層：Tuya 的雲端服務**

Tuya 提供一個整合的物聯網雲端平台，設備的數據通常會透過這個平台進行處理和管理。智慧插頭將其感測數據發送到 Tuya 的雲端伺服器，這是用來實現遠端監控的核心部分。

-   **雲端儲存與數據處理**：所有來自插頭的狀態和電力數據會發送到 Tuya 的伺服器，這些數據會被處理並存儲，讓用戶可以通過應用程式查看耗電情況和其他資訊。
-   **API**：開發者可以透過 Tuya 提供的 API 來存取這些數據（例如你在程式中使用的 `tinytuya.Cloud()`），讓應用程式能夠與插頭進行通訊。

### 4. **應用程式層：用戶端的控制**

用戶可以使用 Tuya 的應用程式或第三方應用程式（如 Alexa、Google Home 等）來控制智慧插頭。這些應用程式的功能通常包括：

-   **遠端控制**：可以隨時隨地通過手機應用程式開啟或關閉插頭。
-   **定時功能**：設置定時器，讓插頭在指定時間自動開關。
-   **能源監測**：實時查看插頭連接的設備的耗電情況。
-   **語音控制**：結合語音助手如 Alexa 或 Google Assistant 進行語音控制。

### 5. **運作過程舉例**

假設你的智慧插頭已連接到 Wi-Fi，並且你的家電（例如洗衣機）插在這個插頭上：

-   當洗衣機開始運作時，電流感測器檢測到電流變化，MCU 會處理這個訊號，計算出功率消耗，並且定期將這些數據發送到 Tuya 的雲端伺服器。
-   你可以打開手機應用程式，查看洗衣機的耗電數據，以及它是否正在運作。如果你想手動關閉插頭，你可以透過應用程式下達指令，雲端伺服器會將這個指令傳送回智慧插頭，插頭接收指令後執行關閉操作。

### 小結：

1.  **硬體層**：感測器和 MCU 負責檢測設備的電力數據，並控制插頭的開關。
2.  **韌體層**：內部的控制程式負責數據處理和裝置狀態的更新。
3.  **雲端層**：Tuya 的雲端平台處理和儲存來自插頭的數據，並提供 API 給開發者存取這些數據。
4.  **應用層**：用戶可以透過應用程式或第三方服務來遠程控制插頭並查看設備狀態。

這些組件協同運作，讓智慧插頭能夠實現即時數據監控和遠端控制。如果你正在開發與此智慧插頭交互的應用，了解這些運作機制有助於你更有效地進行程式設計和系統集成。
<br/>
:::

:::spoiler _**About SSL**_
<br/>
在進行智慧插頭的開發和應用時，數據安全是至關重要的。尤其是當你的應用涉及到從 Tuya Cloud 獲取敏感資料或與智慧插頭進行通訊時，SSL/TLS（安全套接層/傳輸層安全性）協議就顯得尤為重要。這些協議能夠確保你的數據在傳輸過程中得到加密，防止被竊取或篡改。

#### SSL/TLS 基本概念
1. SSL/TLS：
    - SSL（Secure Sockets Layer）和其後繼者 TLS（Transport Layer Security）是用來加密網絡傳輸的協議。TLS 是 SSL 的升級版，現今普遍使用的是 TLS。
    - 它們的主要目的是保護通訊過程中的數據安全，防止數據被竊取或篡改。

2. 證書：
    - CA證書：用來驗證伺服器證書是否由受信任的證書頒發機構（CA）簽發。CA 證書包含了簽發證書的公鑰。
    - 伺服器證書：由伺服器提供，證明伺服器的身份。它由 CA 簽名並包含伺服器的公鑰。

3. SSL/TLS 工作流程：
    - 瀏覽器 / API 客戶端與伺服器建立連接時，伺服器會發送其 SSL/TLS 證書。
    - 客戶端驗證伺服器的證書是否合法、並由受信任的 CA 簽名，並且檢查證書是否過期。
    - 如果驗證通過，客戶端和伺服器會建立加密連接，開始加密通信。
:::

<br/>

## Process

#### A. 網站方案

1. **方法1**: 使用外部的 domain host 供應商基本的 ++Single Web Hosting++ 租借計畫
   - 使用這個計畫的主機空間來運行 PHP 腳本，通過 PHP 的 cURL 模組訪問 Tuya Cloud API 來獲取智慧插頭的數據。這些數據可以進一步用於後端處理並提供給前端服務顯示。
   - **優點**: 成本較低，適合基本需求。
   - **缺點**: 沒有 SSH 訪問，可能限制了進一步的自動化和 php 以外的腳本運行。
   > ==使用 tuyapiphp 成功運作 [🧷](https://github.com/ground-creative/tuyapiphp.git)==

2. **方法2**: 使用外部的 domain host 供應商進階的 ++VPS Hosting++ 租借計畫
   - 使用這個計畫提供的 SSH 功能，透過訪問遠端 VPS 的 domain 空間來設置環境。可以使用 Python 的 tinytuya 函式庫來更新 API Smart-Plug 資訊至 mySQL 資料庫。PHP 腳本則可以通過訪問 mySQL 來索取特定資料並提供給前端服務顯示。
   - **優點**: 提供 SSH 訪問，可以進行更多自動化和腳本運行，並可在遠端 VPS 上運行 Python 腳本進行數據處理。
   - **缺點**: 成本較高，需要更多的配置和維護工作。

3. **方法3**: 使用開發板（如樹莓派、Arduino 等）來進行 IP Hosting
   - 利用像樹莓派（Raspberry Pi）這樣嵌入式系統，設置一個小型的網路伺服器來承載網站文件。這些裝置通常可以運行輕量級的 web 伺服器軟體（如 Nginx 或 Apache），並通過公共 IP 或動態 DNS 服務來提供外部訪問。
   - **步驟**:
     1. **準備硬體**: 選擇適合的開發板，例如樹莓派，並確保其具有足夠的存儲和處理能力來運行你的網站。
     2. **安裝操作系統**: 安裝適合的操作系統（如 Raspberry Pi OS）在樹莓派上。
     3. **安裝 Web 伺服器**: 安裝並配置 Web 伺服器軟體（如 Nginx、Apache 或 Lighttpd）來承載你的網站文件。
     4. **配置網路**: 設置靜態 IP 地址或使用動態 DNS 服務來確保你的開發板可以被外部訪問。
     5. **部署網站文件**: 將你的網站文件上傳到開發板的 Web 伺服器目錄中。
     6. **測試**: 確認網站可以通過公共 IP 或域名正常訪問。
   - **優點**: 成本低，適合用於學習和小型項目，且可以自定義和控制整個環境。
   - **缺點**: 硬體資源有限，可能需要處理網路安全問題，並且對於大流量或高可用性要求的網站來說，這種方案可能不夠穩定。
---
#### B. Line Bot 方法

1. **方法1**: 使用 Line Messaging API 來開發基本的 Line Bot
   - 通過 Line Messaging API 來構建一個基本的 Line Bot，使其能夠與用戶進行互動，提供即時的智慧插頭數據和控制功能。這種方法通常需要設置一個 Webhook URL，該 URL 由你的伺服器提供，用來接收來自 Line 的訊息和事件。
   - **優點**: 可以快速上線，易於整合到現有的網站和服務中。
   - **缺點**: 功能可能比較基本，較複雜的功能需要額外開發。
   - **Hosting Machine**:
     - 你需要一台可以提供 Web 服務的伺服器，這個伺服器會接收來自 Line 平台的 Webhook 請求。
     - 這個伺服器可以是你的本地伺服器、雲端伺服器，或者使用服務提供商的 hosting 資源（如 AWS、Heroku 等）。

2. **方法2**: 使用 Line Bot SDK 來開發更進階的 Line Bot
   - 使用 Line Bot SDK（例如 Node.js、Python 等 SDK）來開發具有更複雜功能的 Line Bot，例如定制化的對話流程、狀態監控和自動提醒等。SDK 提供了更多的功能和擴展性，適合需要更多自定義的應用場景。
   - **優點**: 可以提供更高級的功能和更好的用戶體驗。
   - **缺點**: 開發和維護成本較高，需要更多的時間和技術投入。
   - **Hosting Machine**:
     - 你需要一台支持運行 SDK 的伺服器，這台伺服器將會運行你的 Line Bot 程式碼。
     - 同樣，你可以選擇本地伺服器、雲端伺服器，或是使用雲端服務平台（如 AWS Lambda、Google Cloud Functions、Heroku 等）來進行部署。

* 其他方案：租借 Line Bot Hosting 資源
    - **租借 Hosting 資源**: 目前 Line 本身並不提供專門的 Hosting 服務來運行 Line Bot。開發者通常需要租用第三方的伺服器或使用雲端平台來部署和運行其 Line Bot。
      - **雲端平台**: 可以使用如 AWS、Google Cloud、Microsoft Azure 等雲端服務平台來進行托管，這些平台提供了豐富的計算資源和彈性的擴展能力。
      - **專門的 Platform-as-a-Service (PaaS)**: 服務如 Heroku、Glitch 等，可以簡化部署過程並提供靈活的環境配置選擇。

<br/>

## Code


<br/>

## Summary
ToDo.


<br/>

:::spoiler Relevant Sources
[Github - TuyaIoT-SmartLaundry](https://github.com/William-HuangWY/TuyaIoT-SmartLaundry)
:::