大家好,又见面了,我是你们的朋友全栈君。
小米设备token获取&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依赖(本机存在的会忽略)
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
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库,下载库代码到本地
git clone https://github.com/rytilahti/python-miio
下面就以小米智能插座为例,获取该设备token。进入python-miio/miio目录discovery.py文件主要是来获取设备token的方法。为了直观将插座的主要实现代码提取出来,在python-miio/miio目录编写如下脚本miio_test.py(向设备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(‘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
pip3 install HomeAssistant
- 启动HomeAssistant
hass
第一次启动HomeAssistant,因为要安装相关依赖,大概要等上10几分钟,通过浏览器访问树莓派的8123端口,如果看到如下页面,证明安装启动成功。
将小米设备配置到HomeAssistant
进入.HomeAssistant目录,编辑configuration.yaml,添加小米网关和Wi-Fi插座的配置参数,token为按照上文你获取到的字符串:
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这样的智能家居平台,将各式的资源整合到一起,使得家居距离智能更近了一步。当然,从目前的智能家居市场来看,单独一个智能设备厂商不太可能让所有用户仅使用自己的设备,所以给用户一些控制的“自由”,对厂商来说应该是个不坏的选择。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129599.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...
评论列表(1条)
反对法