科技新媒体
您的位置:主页 > 智能 > 内容:如何获取小米设备的token获取有三种途径?(一)

如何获取小米设备的token获取有三种途径?(一)

时间:2021-10-02 10:09:15来源:网络整理

导读 : 下面就以小米智能插座为例,说明如何获取该设备的token。如果能用上述的探测方法获取token还是比较便捷的,但目前只有部分小米设备支持。从目前的智能家居市场来看,用户不会只使用单个智能设备厂商的设备,所以对于厂商来说,通过开放接口给用户一些局域网的控制“自由”,实现不同厂商设备的联动是一个不错的选择。...

作者的博客:

近两年,物联网技术发展迅猛,各种智能设备逐渐走进我们的家庭生活。在众多智能设备厂商中,小米是智能家居生态较早的厂商。几乎所有购买智能家居设备的用户都会拥有一两台小米设备。那么是否可以控制这些小米设备,过程中是否存在安全隐患?本文接下来将主要介绍这些内容。

具体来说,除了米家app控制小米设备,小米还提供了控制局域网的方式,但前提是获取一串字符串(即token)进行设备认证,所以接下来介绍如何获取设备令牌。以及如何实现局域网控制设备。

一、整体流程介绍

在同一个局域网内,小米设备可以使用专有的加密UDP网络协议miio协议进行通讯控制。在网络可达的前提下,向小米设备发送一串hello字节,获取包含token的结构数据。之后,构造相应的结构体并以同样的方式发送给设备以实现控制。具体流程如下图所示:

二、获取小米设备令牌

小米设备Token的获取方式有以下三种:

2.1 miio 获取令牌

miio有一个基于Python的库,其Github项目地址为:。该项目支持所有兼容miio协议的设备,并对设备发现、识别和控制的方法进行分类。

智能张拉设备怎么安装_做家居智能安装怎样_智能家居设备安装

2.1.1 环境安装

python-miio需要Python3.5以上才能运行,所以先搭建Python环境。接下来,我们在 Ubuntu 操作系统或树莓派的计算机上安装 Python3.5:

安装5个依赖(本机存在的将被忽略)

sudo apt-get install build-essential lib
sqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev

编译安装 5

wgethttps://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
tarzxvfPython-3.5.2.tgz
cd./Python-3.5.2
./configure--prefix=/usr/bin/python3.5
sudomake
sudomakeinstall

编译后运行5,结果如下,证明安装成功

sean@ubuntu:~/Desktop/week/ProcessAndDeadline$ python3.5
Python3.5.2(default,Nov232017,16:37:01)
[GCC5.4.020160609]onlinux
Type"help","copyright","credits" or"license" formoreinformation.
>>>

安装miio库,下载库代码到本地安装

智能张拉设备怎么安装_智能家居设备安装_做家居智能安装怎样

gitclonehttps://github.com/rytilahti/python-miio
cd python-miio/
python3.5 setup.py install

2.1.2 通过脚本获取token

下面以小米智能插座为例,说明如何获取设备的token。

脚本编写

首先智能家居设备安装,需要确保获取令牌的客户端必须能够访问套接字网络。为了直观地展示,我们将从库中提取主要的实现代码(见下文)。将文件放在python-miio/miio目录下(本脚本主要使用socket向设备ip的54321端口发送固定字符串,返回值为设备token):

#-*-coding:utf8-*-
import codecs
import socket
from protocol import Message
helobytes=bytes.fromhex('21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto(helobytes,('192.168.42.17',54321))#插座ip,端口54321
data,addr=s.recvfrom(1024)
m=Message.parse(data)
tok=codecs.encode(m.checksum,'hex')
print(m)
print(tok)

相关推荐:
最新阅览:
推荐:
猜你喜欢: