2024-10-06

使用指令控制 Tuya裝置

最近整理物件時,在下找回一個大約在1年前購買的智能電插座
但又是必須使用專用應用程式才能使用,在下希望不依賴專用應用程式都能夠控制裝置

智能電插座外觀及規格

使用 BS1363 插座及插孔,不計算插腳厚度大約33厘米,直徑大約57厘米
規格為 100V 至 240V AC16A 保險絲WiFi 2.4GHz

根據資料,這款智能電插座,是由一間稱為 塗鴉智能(Tuya Smart) 的公司設計
然而這公司只是在電插座上添加電子控制晶片,但電力裝置並非由該公司所製作
因此使用這些產品而發生意外,該公司很大機會不會負責,所以使用時請了解相關風險

電插座配對及連接網絡

雖然目的是使用指令控制電插座,但配對操作仍然需要依賴應用程式

第一次開啟 應用程式,需要允許傳送通知
由於 通知 並非必須使用的權限,因此可以不允許 傳送通知

登入 帳戶
(在下不說明帳戶申請步驟)

登入後,按 添加設備加號圖示

應用程式 要求允許權限存取,按 繼續

應用程式 需要存取 地址位置本地網絡藍牙 才能配對裝置
需要允許這些權限才能 偵測配對 裝置

家居資料 則與 偵測 及 配對 無關,因此可以不允許

同意存取權限後,接通裝置電源,並 按著裝置的按鈕5秒 載入到 配對模式(指示燈以會300毫秒閃動)

應用程式 便能夠 偵測 到 裝置

選取 裝置 後,會要求輸入 WiFi SSID密碼 ,再按 下一步 便會連接 WiFi

一般情況下,如果閣下的 Android 或 iOS 已經連接 WiFi ,會自動輸入 SSID
但 裝置 的 WiFi訊號 只支援 2.4GHz ,不支援 5GHz
因此如果 Android 或 iOS 連接的 WiFi 是 5GHz ,會無法連接

等待 裝置 連接,然後按 完成

操作及功能

所有設備 的頁面,會顯示所有 已配對 及 連接WiFi 的裝置
點選 開關圖示 便可以控制 插座開關
亦可以點選裝置的 選項,顯示更多資料

更多資料頁面,除了基本開關功能

還能夠 設定行程能在指定日期或時間自動開或關

另外有統計用電量,包埋當前 毫安倍(mA)功率(W)電壓(V)
還會保存 度電每小時(KWh)

Tuya IOT Cloud

登入 Tuya IOT Cloud
(在下不說明帳戶申請步驟)

建立專案

到 左邊選單 的 Cloud > Development

Create Cloud Project

Project Name 輸入 專案的名稱
IndustryDevelopment Method 選擇 Smart Home
Data Center 在下發現選擇 China Data Center 某些步驟無法執行,因此改用 Western Ameraic Data Center

由於在下使用 免費服務 因此只能 選取一個資料中心

設定後按 Create

建立專案後,會自動選取,但這篇文章最主要是使用

  • IoT Core
  • Authorization Token Management
  • Smart Home Basic Service

其他服務可以不使用

配對應用程式

建立專案後,會自動載入到 專案Overview 分頁,到 Devices

Link App Account 分頁

Add App Account

會顯示 QR Code

使用 應用程式 按 加號圖示掃一掃

應用程式 要求存取 相機
由於要掃描 QR Code 因此必須允許權限

掃描後 應用程式 是否登錄,按 確認登錄

IOT平台 會顯示 Link App AccountDevice Link Method
在下建議選取 Automatic Link (Recommand) ,按 OK

完成後會顯示裝置將會連接到專案

獲取裝置 Local Key

連接後會顯示(或按 Manage Devices)已連接的裝置
將需要使用的裝置的 Device ID 複製

Cloud > API Explorer

選取 Device Management > Query Device Details
將複製的 Device ID 貼上到 device_id 然後按 Submit Request
便可以找到 裝置 的 local_key ,能讓 裝置 不需要經 Tuya IOT Cloud 來操作

VirtualBox 設定

https://www.home-assistant.io/installation/linux
下載能在 VirtualBoxQEmu 運作的 Home Assistant
在下使用 VirtualBox 因此下載 Home Assistant 的 VDI版本

開啟 VirtualBox , 到 工具 > 新增

設定 虛擬機名稱
類型 選取 Linux
版本 選取 Linux 2.6 / 3.x / 4.x (64-bit)

記憶體 設定為 2048 MB

將 Home Assistant 的 VDI檔案 移至 虛擬機的目錄

硬碟 選擇 使用現有 虛擬硬碟檔案 ,再點選 目錄圖示

加入

選取 Home Assistant 的 VDI檔案

選取 Home Assistant 的 虛擬硬碟 後,按 選擇

完成

選取 Home Assistant 虛擬機 後,按 設定

系統 分頁,啟用 EFI (僅特定作業系統)

網絡 分頁,在 附加到 選擇 橋接介面卡
完成設定後 按 確定 ,並 起動 Home Assistant 虛擬機

Home Assistant 起動完成後,會顯示載入系統的方法

Home Assistant

初始化

開啟 網頁瀏覽器http://homeassistant.local:4357/ 會顯示 Home Assistant 的狀態

http://homeassistant.local:8123/ 正式載入到 Home Assistant 的 控制頁

有時無法使用域名連接,可以改用 IP 連接

建立我的智能家庭 開啟設定 Home Assistant

設定 使用者名稱密碼

設定 地理位置
如果閣下不需要真實的地理資訊,可以胡亂選擇

如果閣下打算協助 Home Assistant 改善,可以開啟回饋

Home Assistant 會 自動偵測相同網絡中的網絡服務
設定後按 完成

完成設定會自動登入到 Home Assistant

安裝 SSH

設定 > 附加元件

附加元件商店

找不到附加元?於個人頁面中開啟進階模式

重新登入 Home Assistant

啟動 進階模式

再到 設定 > 附加元件
點選 Terminal & SSH

安裝

啟動

安裝 HACS

啟動 Terminal & SSH 後,會 顯示 CPU 及 RAM 的使用率
亦建議 啟動 於側邊列顯示 方便使用 Terminal & SSH

開啟 Terminal & SSH ,輸入

wget -O - https://get.hacs.xyz | bash -

便會 下載及安裝 HACS 附加元件

HACS 需要重新啟動 Home Assistant
(但不需要重新開機)

設定 > 裝置與服務

新增整合

搜尋及安裝 HACS

HACS 需要同意一些使用條款

  • I know how to access Home Assistant logs
  • I know that there are no add-ons in HACS
  • I know that everything inside HACS including HACS itself is custom and untested by Home Assistant
  • I know that if I get issues with Home Assistant I should disable all my custom_components

點選條款後按 傳送

啟動 HACS 需要 使用授權
HACS 會建立 授權碼,並前往 https://github.com/login/device 認證

需要登入 GitHub 帳戶
(在下不說明帳戶申請步驟)

登入 GitHub 帳戶後,按 Continue 啟動裝置

將 HACS 建立的 授權碼 貼上並按 Continue

Authorize HACS 授權

回到 Home Assistant 頁面顯示已授權,按 完成

安裝 Local Tuya

到 HACS , 搜尋 Local Tuya

Download

選取 最新版本 的 Local Tuya

設定 ,按 Restart required 以修正

再到 設定 > 裝置與服務

設定 Local Tuya
新增整合 ,搜尋及安裝 LocalTuya intergration

由於在下不想使用 Tuya IOT Cloud ,而是使用自己的網絡
因此點選 Do not configure a Cloud API account 後,按 傳送

載入到 LocalTuya intergration 頁面

設定 ,再按 Add a new device

選取 與 device id 相同的裝置

Configure Tuya device
在 Name 輸入服務的名稱
將在 Tuya IOT Cloud 獲得的 local_key 貼上到 Local key
根據不同的裝置,在 Protocol Version 選擇對應的版本,在下測試是使用 3.4

Entity type selection
由於在下測試的裝置是 開關裝置 ,因此選擇 switch

Configure entity
switch 的 IDFriendly name 為必須設定項目
ID 設定為 1 , Friendly name 只需要任意文字即可
CurrentCurrent ConsumptionVoltage 則需要裝置支援這些功能才需要設定
如果裝置支援這些功能,可以選擇

  • 18 當前電流
  • 19 當前功能
  • 20 當前電壓
  • 22 電壓校準係數
  • 23 電流校準係數
  • 24 功率校準係數

實際上,功能並不一定需要跟隨描述

不知為何會出現多次 Entity type selection ,再次選擇 switch

完成新增

測試 Local Tuya

可以在 Home Assistant 透過 控制 Tuya裝置

亦可以在 實體 分頁,獲知裝置的狀態

TinyTuya

安裝

安裝 Python 的 pip 方便管理 Python函式庫,輸入:

sudo apt install python3-pip

安裝 TinyTuya 函式庫,輸入:/p>

pip install tinytuya

但出現 error: externally-managed-environment

安裝 Python 的 Venv ,輸入:

sudo apt install python3-venv

Venv 是 Python 的 虛擬環境 (Virtual Environment)
能夠將可能與主系統有衝突或兼容性問題的函式庫安裝到虛擬環境中,避免影響主系統

安裝 Python 的 Venv 後,輸入:

python3 -m venv venv
venv/bin/pip install tinytuya

便可以將 TinyTuya 及其他相依函式庫安裝到 venv 中

偵測

如果已經建立專案及配對裝置,亦可以使用 TinyTuya 來獲取裝置的 local_key ,輸入:

venv/bin/tinytuya wiazrd

TinyTuya 需要使用者提交 API KeyAPI Secret 來列出已配對裝置的資訊

測試

安裝 TinyTuya 及相依函式庫後,輸入

import tinytuya
#import json
device = tinytuya.Device("device-id", "device-ip", "local-key")
device.set_version(3.4)
# show device status in python dict format
print(device.status())
# JSON format
#print(json.dumps(device.status()))
# turn on the device
#device.turn_on()
# turn off the device
#device.turn_off()

便可以使用 Python 控制 裝置

這個操作比 Home Assistant 更方便,因為只需要使用指令便可以遙距操作
而且還能夠自行編寫自動化操作,不需要依賴 應用程式 的功能

補充資料

資料來源 bigclivedotcom @ YouTube.com

有外國使用者將與在下相同的裝置解體,並將內部結構的圖像放大
WiFi 功能是使用 BK7231模組,不過較舊的版本則是使用 ESP8285模組

這類 智能電插座 的運作原理主要是透過 WiFi 接收控制訊號
當 控制訊號 為 接通 時﹐將 繼電器(Relay) 的線路接通,從而將電器的電路接通以啟用電器;反之亦然

但亦由於 智能電插座 是屬於直接通電或斷電的操作,只適合同樣能夠直接通電或斷電的電器
如果電器需要接通電源後,再透過電子方式控制開關,這類電器經常直接斷電可能會損壞電子元件

總結

這個 智能電插座 已經購買了一段時間,但由於這個裝置必須使用對應的 應用程式 才能使用,在下同樣覺得非常麻煩
但又花了很多時間仍未能逆向工程其運作原理,因此一直延後測試

在下在網上尋找相關文章時,發現很多教學文章及影片使用 Local Tuya
但沒有包含 Home Assistant 的安裝說明,因此需要一些時間了解 Home Assistant
所以在下連同 Home Assistant 及 Local Tuya 的安裝及設定步驟同樣說明

另外 Tuya IOT Cloud 部分操作已經更改,令部分教學與現在的操作有些微分別
(不過這個情況無法預防,畢竟教學內容無法不斷追貼每個平台的更新情況
即使在下的文章都會有過期、不合時宜的情況)

雖然 Home Assistant 及 Local Tuya 都有能夠透過網頁瀏覽器設定,不需要太多電腦知識便能夠操作
不過在下還是希望可以使用指令或編寫程式的方法控制
結果在下使用的 TinyTuya 是一種 Python函式庫 能控制 Tuya裝置
但網上極少關於 TinyTuya 的使用例子,因此藉這個專案來測試效果

雖然在下能夠使用 TinyTuya 控制,但在下還是想製作自己的操作工具
不過在已經花費不少時間了解 TinyTuya 及 Tuya IOT 官方的運作原理,不過仍未完成

參考資料

沒有留言 :

張貼留言