Android 5.0 Termux 实现对米家设备的控制

本文介绍了如何使用Xiaomi-cloud-tokens-extractor获取小米设备的Token,然后通过python-miio库控制米家智能设备,如智能小饭煲和智能插座。虽然对于某些型号如米家智能小饭煲的支持有限,但可以成功控制小米智能插座2蓝牙网关版,并提供了发送源数据控制设备的方法。
部署运行你感兴趣的模型镜像

1. 获取设备Token

  • 使用 Xiaomi-cloud-tokens-extractor 获取设备token

Xiaomi-cloud-tokens-extractor开源地址:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor

  • 下载代码以及运行

这步可以在当前的电脑上运行,也可以在Termux上运行。

$ startalpine
$ git clone https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor.git
$ cd Xiaomi-cloud-tokens-extractor
$ python3 token_extractor.py

执行到这步时会跳出需要输入小米ID和密码,Server选cn。
如果账号密码正确的话就能获取到设备对应的token以及其它重要信息了。

Username (email or user ID):
xxxx
Password:
xxxx
Server (one of: cn, de, us, ru, tw, sg, in, i2) Leave empty to check all available:
cn

Logging in...
Logged in.

Devices found for server "cn":
   ---------
   NAME:     Mijia Smart Rice Cooker Mini 2
   ID:      xxx
   MAC:      xxxxx
   IP:       xxxx
   TOKEN:    xxx
   MODEL:    xxx
   ---------


Press ENTER to finish

2. 通过python-miio 操控设备

  1. 打开米家,找到自己的设备,并且进入网络信息查看设备的IP地址。
  2. 第一章节拿到了设备的token,使用miiocli 命令查看设备基本信息(这步执行有点慢,需要等一会,不要着急…)
$ miiocli device --ip <ip> --token <token> info

Model: chunmi.cooker.eh3
Hardware version: esp32
Firmware version: 2.2.0_0010

可以看到,米家智能小饭煲2的设备基本信息打印出来了。

  1. 试一下python脚本
import miio
dev=miio.device.Device("192.168.2.103","5de109637c4cb89a65edee621612ed1b")
dev.info()

正常会返回设备信息

  1. 试着获取它的状态
d = miio.cooker.Cooker(<ip>,<token>)
d.status()
Found an unsupported model 'chunmi.cooker.eh3' for class 'Cooker'. If this is working for you, please open an issue at https://github.com/rytilahti/python-miio/

好吧,发现还不支持,于是乎我提交了issue:https://github.com/rytilahti/python-miio/issues/1670
希望有用到这个设备的朋友,进去支持一下

  1. 既然小饭煲不行,那就试下小米智能插座2 蓝牙网关版,结果可行
import miio

ip = "192.168.101.30"
token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

dev = miio.device.Device(ip, token)
dev.info()
# 关闭智能插座
dev.send("set_properties", [{'did': '<device id>', 'siid': 2, 'piid': 1, 'value': False}])
# 开启智能插座
dev.send("set_properties", [{'did': '<device id>', 'siid': 2, 'piid': 1, 'value': True}])
# 获取智能插座状态
status=dev.send("get_properties", [{'did': '<device id >', 'siid': 2, 'piid': 1}])
print(status)
  1. 在网上找了一些资料,发现不一定要python-miio 支持也能通过发送源数据控制设备。

Reference:

  1. https://www.cnblogs.com/ff888/p/16698180.html
  2. https://home.miot-spec.com/spec?type=urn:miot-spec-v2:device:outlet:0000A002:chuangmi-212a01:1

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户解决如何通过编程获取小米摄像头的画面数据。首先,我需要回忆用户之前的问题和我的回答,看看是否有相关的信息。用户之前提到了小米路由器XDR300的远程控制功能,引用[1]里提到小米路由器可以绑定智能设备并进行远程控制,可能摄像头也是其中之一。此外,用户还提到过调用手机摄像头的Python代码,引用[3]里有一些关于使用Python调用手机摄像头的注意事项和教程,可能相关。 首先,用户现在想获取小米摄像头的画面数据,可能的途径包括官方API、第三方库、或者RTSP协议等。我需要考虑小米摄像头是否开放了API接口,或者是否有SDK可供使用。根据引用[1]中的信息,小米路由器可以通过移动APP绑定设备,可能摄像头也是通过类似的流程,所以可能需要通过小米的云服务API来访问摄像头数据。不过,官方是否提供这样的API呢?可能需要查阅小米的开发者文档。 另外,用户可能没有官方API的权限,这时候可能需要使用其他方法,比如RTSP流。很多IP摄像头支持RTSP协议,可以通过rtsp://地址来获取视频流。小米摄像头是否支持这个协议?可能需要用户查看摄像头的设置或文档,或者尝试默认的RTSP地址和端口。例如,常见的RTSP地址格式是rtsp://ip地址:端口/流名称,需要摄像头的IP地址、用户名和密码。 如果用户想通过Python来实现,可能需要用到OpenCV或者ffmpeg库来处理视频流。引用[3]中提到用Python调用手机摄像头,但这里需要的是小米摄像头,可能需要不同的方法。例如,使用OpenCV的VideoCapture读取RTSP流,或者使用requests库访问API获取图像数据。 另外,用户可能需要先确保摄像头和编程设备在同一网络下,通过小米路由器连接,如引用[1]中的步骤,绑定设备后可能更容易访问。此外,用户需要注意隐私和安全问题,确保获取数据的过程合法,不侵犯他人隐私,如引用[3]中的提醒。 可能的步骤包括: 1. 查找小米摄像头的开发文档,确认是否有官方API。 2. 尝试通过RTSP协议访问摄像头,使用默认或设置的凭据。 3. 使用Python库如OpenCV或aiortc来捕获视频流。 4. 处理可能的身份验证和加密问题。 5. 确保网络配置正确,端口开放,防火墙设置允许访问。 如果官方API不可用,可能需要逆向工程小米的APP,分析其网络请求,但这可能涉及法律问题,不建议。因此,更推荐使用RTSP或ONVIF等标准协议,如果摄像头支持的话。 另外,可能需要安装额外的依赖库,如引用[2]中的libjpeg-dev等,以支持图像处理。在Python中,可能需要安装opencv-python、requests等库。 总结可能的实现方法: - 使用RTSP流:通过OpenCV读取。 - 调用小米的开放API(如果有的话)。 - 使用小米的SDK(如果提供)。 需要提醒用户注意法律和隐私问题,确保有权限访问摄像头的数据。</think>通过编程获取小米摄像头画面数据的实现方法可分为以下步骤: ### 一、官方API接入 1. 访问小米开放平台(https://open.home.mi.com/),申请开发者账号并创建应用 2.设备控制API中查找「摄像头实时流」相关接口 3. 使用OAuth2.0协议获取访问令牌,示例代码: ```python import requests auth_url = "https://api.home.mi.com/oauth2/authorize" token_params = { "client_id": "your_client_id", "response_type": "code", "redirect_uri": "callback_uri" } # 需完成OAuth2.0完整授权流程获取access_token ``` ### 二、RTSP协议直连(需摄像头支持) 1. 确认摄像头型号支持RTSP协议(如小米智能摄像头云台版Pro) 2. 获取RTSP地址格式(通常需要设备序列号): $$ rtsp://{ip}:554/stream=0?username={username}&password={password} $$ 3. OpenCV实现示例: ```python import cv2 cap = cv2.VideoCapture("rtsp://admin:password@192.168.31.100:554/stream1") while True: ret, frame = cap.read() cv2.imshow('Mi Camera', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() ``` ### 三、局域网发现协议 1. 使用SSDP协议发现设备: ```python import socket msg = \ "M-SEARCH * HTTP/1.1\r\n" \ "HOST:239.255.255.250:1900\r\n" \ "ST:urn:schemas-micam-com:device:Camera:1\r\n" \ "MX:2\r\n" \ "MAN:\"ssdp:discover\"\r\n\r\n" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(msg.encode(), ("239.255.255.250", 1900)) ``` ### 注意事项 1. 需要开启路由器的UPnP功能(参考小米路由器设置[^1]) 2. 建议使用HTTPS协议保证数据传输安全[^1] 3. 图像处理可能需要安装OpenCV依赖库: ```bash sudo apt-get install libopencv-dev python3-opencv # 参考[2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值