文章目录
一、背景介绍
1.目标
目标:我们希望用命令行或代码远程进行断电冷启动,省去人工在实验室大量反复手动冷启动的过程。
2.实现思路
实现思路:购买小米智能插座,可以远程操控。现在已知可以通过手机米家APP控制开关。现在的目标是尝试用命令行来控制开关。以下是实现步骤。
3.品牌介绍
品牌名称:米家智能插座3
特点:直连WIFI,无需网关 (官方旗舰店介绍)
两种联网方式:Wi-Fi、蓝牙
二、用命令行操控小米智能插座的教程
1.准备好Linux环境,例如WSL
WSL (Windows Subsystem for Linux) 是 Windows下的Linux子系统。
WSL配置的详细介绍,见本文:https://blog.csdn.net/Edward1027/article/details/144552668
下面是WSL配置的简略版介绍:
1.打开powershell,安装wsl
wsl --install -d Ubuntu
2.重启电脑
3.重新打开powershell,启动WSL环境
wsl
2.Linux系统基本配置
1.下载安装包
sudo apt update
2.更新版本
sudo apt upgrade -y
3.安装对应的包
例如:安装Python3和pip:
sudo apt install python3-pip
3.安装、创建、激活 Python虚拟环境
1.安装虚拟环境 venv 或 virtualenv
例如,python 3.12版本安装venv:
sudo apt install python3.12-venv
2.创建虚拟环境
python3 -m venv myenv
3.激活虚拟环境
source myenv/bin/activate
此时成功进入Python的虚拟环境。可以放心大胆的在此虚拟环境做实验了。
4.正式开始:获取小米智能设备的 token和IP 等信息
获取小米设备信息的代码仓库:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
如果网络不好,git clone https拉不下来,去上面仓库就换成ssh拉取。
但是用ssh协议,要在本地配置git信息、公钥等,属于ssh配置的通用基本步骤,但是不短,在此不方便赘述。可自行查询我的git教程:https://blog.csdn.net/Edward1027/article/details/139689299
# 安装
pip3 install pycryptodome pybase64 requests
# 获取代码
git clone https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor
cd Xiaomi-cloud-tokens-extractor
# 登录小米账号, 以获取该账号下的设备信息
python3 token_extractor.py
5.最终一步:命令行控制插座的开与关
注意插座和电脑要在同一个局域网内,否则无法搜索到目标设备
pip3 install python-miio
sudo apt-get install libffi-dev libssl-dev
#获取设备信息
miiocli device --ip IP --token TOKEN info
#获取插座状态
miiocli -d device --ip <此处填写你设备的IP> --token <此处填写你设备的TOKEN> raw_command get_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1 }]"
#开
miiocli -d device --ip <此处填写你设备的IP> --token <此处填写你设备的TOKEN> raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value':True}]"
#关
miiocli -d device --ip <YOUR_DEVICE_IP> --token <YOUR_DEVICE_TOKEN> raw_command set_properties "[{'did': 'MYDID', 'siid': 2, 'piid': 1, 'value':False}]"
6.替代第4、5步的另一种方式:Miio 命令行工具
sudo apt install npm
npx miio discover
这将列出与您的计算机连接到同一网络的设备。让它运行一段时间,以便有机会访问所有设备,因为所有设备可能需要一两分钟才能响应。
该命令以这种格式输出每个设备:
输出的信息为:
- Device ID- 设备的唯一标识符,如果设备重置则不会改变。
- Model ID- 如果可以确定,则为型号 ID,这表明它是什么类型的设备。
- Address- 设备在网络上的 IP。
- Token- 设备的令牌或者???如果无法自动确定。
我实测下来,npx miio discover
搜索网络中的小米设备 这一步,非常慢。推荐还是用第4、5步,登录小米账号获取token和IP的方式
三、参考文献
1.使用代码控制小米智能插座:https://blog.csdn.net/linzhiji/article/details/118194526
2.小米Home Assistant:
①获取token:https://www.home-assistant.io/integrations/xiaomi_miio#retrieving-the-access-token
②小米智能 WiFi 插座和智能电源板:https://www.home-assistant.io/integrations/xiaomi_miio#xiaomi-smart-wifi-socket-and-smart-power-strip
3.小米仓库代码的README文件:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor