小米 token(token在哪里获取)

2022-07-29 19:10:10 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

小米设备token获取&HomeAssistant安装部署
  • 小米智能设备token获取
    • miIO-discovery获取token与控制
    • app直接token获取
    • DB获取token
  • 开源智能家居平台HomeAssistant安装部署
    • HomeAssistant简介
    • 安装部署HomeAssistant
    • 将小米设备配置到HomeAssistant
    • HomeAssistant可连接设备
  • 总结

近两年,物联网及其相关技术迅猛发展,各样的智能设备渐渐的走进了我们的生活,随之使用者们也变的越来越向往智能化的生活。但目前的智能家居市场产品分散,单一厂商很难完全满足用户需求,并且多个厂商产品不能原生联动,这可能也是家居智能化面临的问题。本文主要介绍小米设备拿token以及局域网控制,以及一款开源的智能家居平台HomeAssistant部署与使用,让家庭中的多种智能设备联动变成一种可能。

小米智能设备token获取

为了消除对专有软件(米家app)的依赖,米家设备提供一种在局域网控制的方式。在使用这个局域网控制协议之前需要获取到设备token,接下来介绍小米设备获取token的一些方法。

miIO-discovery获取token与控制

设备和米家app在同一局域网下使用的加密专有网络协议,这个被称之为miIO协议。该协议基于UDP,使用54321端口进行通信。具体功能见github地址https://github.com/rytilahti/python-miio,这个库的目的是支持所有miIO兼容的设备,将设备类型和控制方法进行了分类,以简化与它们的交互。该库需要安装在Python3.5以上版本,首先搭建Python环境:

  • 安装Python3.5依赖(本机存在的会忽略)
代码语言:javascript复制
sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev
  • 编译安装Python3.5
代码语言:javascript复制
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
tar zxvf Python-3.5.2.tgz
cd ./Python-3.5.2
./configure --prefix=/usr/bin/python3.5
make
make
sudo make install

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

  • 安装miIO库,下载库代码到本地
代码语言:javascript复制
git clone https://github.com/rytilahti/python-miio

下面就以小米智能插座为例,获取该设备token。进入python-miio/miio目录discovery.py文件主要是来获取设备token的方法。为了直观将插座的主要实现代码提取出来,在python-miio/miio目录编写如下脚本miio_test.py(向设备ip的54321端口发送固定字符串,返回值即为token)

代码语言:javascript复制
#-*-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(‘token:’,tok)
  • 运行python3.5 miio_test.py,获取小米Wi-Fi插座token
  • 执行控制脚本,输入插座的ip和token两个参数就可以看到现在插座的状态,在这两个参数的基础上添加on/off就可以对该设备进行控制

支持这种方式拿token的还有小米的空气净化器、净水器、扫地机器人、智能插座插线板等。具体列表见https://github.com/rytilahti/python-miio

app直接token获取

能用上述的miIO探测方法获取还是比较便捷的,但目前只有部分小米设备支持。接下来还有一种方法可以直接从app获取token。以小米绿米网关为例,首先下载米家app,将绿米网关配置入网后,点击网关设备。接下来步骤如下组图,最后的密码即为网关的token。

目前绿米的这种设计模式是最方便用户的,而且设备的所有者还可以选择是否开放局域网控制以及刷新控制token的有效性,个人还是很希望小米的其他设备同样开放app侧获取设备token,因为毕竟获取需要搭建复杂的环境以及调试代码,大部分使用者应该不能接受的。

DB获取token

 第1步,获取一部安卓手机的root权限  第2步,安装米家app并登录账号  第3步,进入/data/data/com.xiaomi.smarthome/databases/  第4步,拷贝miio2.db,下载到电脑  第5步,前往网站(http://miio2.yinhh.com/),上传miio2.db,点击提交,即可获得token。 没有具体测试这种方式获取token,可以参考这个链接(https://homekit.loli.ren/docs/show/12)

开源智能家居平台HomeAssistant安装部署

上文给大家介绍了获取小米设备获取token方法和插座的简单控制,如果想自动化或者实现多设备联动的话还需要写代码,不会被所有的用户所接受,接下来给大家介绍下一款开源智能家居平台——HomeAssistan,只要几步部署,就可以轻松实现多厂商设备的联动。

HomeAssistant简介

HomeAssistant为开源的智能家居平台,可以识别和直接连接的外部设备有将近千项。其中有各种商业化的智能产品(如小米系列产品、Philips智能灯系列、亚马逊的音响、苹果的Siri、Google Assistant、BroadLink的产品、特斯拉汽车等)、有互联网上的各种实时信息(股票、汇率、交通、天气等)、有开源或开放的各种智能软件(人脸识别、车牌识别文字识别、文字转语音、语音转文字等)、有各种联动机制(短信、Email等)

安装部署HomeAssistant

  • 安装HomeAssistant
代码语言:javascript复制
pip3 install HomeAssistant
  • 启动HomeAssistant
代码语言:javascript复制
hass

第一次启动HomeAssistant,因为要安装相关依赖,大概要等上10几分钟,通过浏览器访问树莓派的8123端口,如果看到如下页面,证明安装启动成功。

将小米设备配置到HomeAssistant

进入.HomeAssistant目录,编辑configuration.yaml,添加小米网关和Wi-Fi插座的配置参数,token为按照上文你获取到的字符串:

代码语言:javascript复制
switch:                                     #小米插座配置参数
  - platform: xiaomi_miio
    name: Xiaomi Mi Smart Power Strip #设备名称
    host: 192.168.42.17                  #设备IP
token: YOUR_TOKEN                    #设备密钥
xiaomi_aqara:                             #小米网关配置参数
  gateways:
    - mac: DEVICE_MAC                     #设备mac
      key: YOUR_TOKEN                     #设备密钥

配置文件修改完成后重启hass,再次访问HomeAssistant主页看到新增Xiaomi Mi Smart Power Strip(配置文件里面的name字段)和GatewayLight设备,这就证明配置完成,点击对应的控制按钮就可以控制该设备了。

HomeAssistant可连接设备

HomeAssistant支持数以千计的设备,这里只举一些列子,比如支持控制小米的设备,BroadLink设备,自己开发的MQTT设备。还可以通过插件支持一些智能语音输入控制,比如安装HAbridge可以使用亚马逊echo音箱、京东音箱和天猫精灵控制HomeAssistant支持的设备,安装HomeBridge和homekit就可以让IOS的Siri控制设备。这里就不一一罗列,具体的详细支持见官网列表

总结

从小米、京东微联、博联等智能家居设备体验来看,智能的并不尽人意。首先,虽然都可以生成若干场景,但大多是自己玩自己的,不同厂商之间无法实现联动;其次场景略显单一,假如用户想实现每次出门之前提醒天气,如果今天是雾霾/雨天提醒用户带口罩/雨具,类似这样的场景是实现不了的。因为缺乏与互联网信息联动的接口,并且大多数厂商的智能音箱与其他设备交互仅仅是语音控制。可能就是考虑到用户的个性化需求,就有了类似HomeAssistant这样的智能家居平台,将各式的资源整合到一起,使得家居距离智能更近了一步。当然,从目前的智能家居市场来看,单独一个智能设备厂商不太可能让所有用户仅使用自己的设备,所以给用户一些控制的“自由”,对厂商来说应该是个不坏的选择。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129599.html原文链接:https://javaforall.cn

0 人点赞