『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 22137|回复: 13

[经验分享] 获取米家设备的token的方法

[复制链接]

1

主题

41

帖子

197

积分

论坛分享达人

积分
197
金钱
156
HASS币
0
发表于 2018-11-21 02:39:01 | 显示全部楼层 |阅读模式
米家app的新版本很多设备都看不到token了。 而且其中android版本也已经不再在本地存储已接入设备的sqlite db文件。这个意思就是说HA官网上的取得token指南 :https://www.home-assistant.io/co ... ng-the-access-token
里,android的方法可能已经不再适用,除非你有老版本的米家apk。 我在Apkmirror上安装的老版本一直启动crash,无奈只能转向iOS。

所幸iOS到目前为止(2018-11-20)的最新版本仍然在本地有存储sqlite文件。
按照上面链接里 iOS那一段说明,可以取到你米家app内的sqlite文件。
  • Configure the robot with the Mi-Home app.
  • Using iTunes, create an unencrypted backup of your iPhone.
  • Install iBackup Viewer, open it, and open your backup.
  • Open the “Raw Data” module.
  • Navigate to com.xiaomi.mihome.
  • Search for a file that looks like this: 123456789_mihome.sqlite – note that _mihome.sqlite is not the correct file.
  • Save this file to your filesystem.
  • Install DB Browser for SQLite.
  • Open DB Browser and load the .sqlite file you saved from your backup.
  • Click on the Execute SQL tab.
  • Input and run this query: SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"
  • Copy the returned 32-digit hexadecimal string to your clipboard.
  • Open Terminal and execute this command: echo '0: <YOUR HEXADECIMAL STRING>' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000
  • Use the resulting string as your token.

但是,按照文中说的最后第 11 到13 步解码那一段,已经过时。因为现在你会发现 11步你取到的ZToken是一串96位的的AES-ECB加密字符。你需要把它解码转换为32位。
实际上github上的开发者早已发现并给了解决办法: https://github.com/rytilahti/python-miio/issues/75
他们提供了 miio-extract-tokens  这个工具方便你提取token。
你需要做的很简单:
1. 把你提取出的 sqlite文件传到你的homeassistant docker 容器内。
2. 确保你homeassistant 容器内安装了 miio  的package, 那个工具应该就在 miio 包内
3. 登入你的homeassistant 容器的 bash:
docker exec -it homeassistant /bin/bash

你可以先尝试运行 mirobo discover,有文档提到可以取到token。不过我这里不行,取得的token全是000000.....
所以我们还是用 miio-extract-tokens, 这个工具很简单你直接
bash-4.4# miio-extract-tokens --dump-all  your_mihome_db_file.sqlite

用 --dump-all 参数导出全部。 这里 your_mihome_db_file.sqlite 是你自己之前取得的db文件。
然后,很神奇地你就得到几乎所有连接进米家的设备的token了,大致输出类似下面这样:
bash-4.4# miio-extract-tokens --dump-all 170424098_mihome.sqlite
INFO:miio.extract_tokens:Reading database from 170424098_mihome.sqlite
INFO:miio.extract_tokens:Reading tokens from Apple DB
玄关灯
        Model: yeelink.light.ct2
        IP address: 192.168.1.89
        Token: adc9xxxxxxxxxxxxxxxxxxxxx94f0
        MAC: 7C:49:EB:xxxxxx
小方智能摄像机
        Model: isa.camera.isc5
        IP address: 192.168.1.98
        Token: 71557xxxxxxxxxxxxxxxxxxxxxxxxx36b62
        MAC: 34:CE:00:xxxxxx
米家多功能网关
        Model: lumi.gateway.v3
        IP address: 192.168.1.126
        Token: daaxxxxxxxxxxxxxxxxxxxxxxxxxxxxd006
        MAC: 7C:49:EB:xxxxxx


然后你就可以愉快地去 configuration.yaml里添加设备了。
Btw, 不知道为啥我的米家网关 用  xiaomi_aqara 模块一直能扫到就是死活连接不上。 用miio居然也扫出来了。 这个token和 米家app里看到的那个key好像不是同一个东西?




评分

参与人数 1金钱 +20 收起 理由
+ 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

8

主题

861

帖子

5110

积分

论坛元老

Rank: 8Rank: 8

积分
5110
金钱
4249
HASS币
0
发表于 2018-11-21 07:30:02 | 显示全部楼层
我是沙发,谢谢分享
回复

使用道具 举报

2

主题

174

帖子

766

积分

高级会员

Rank: 4

积分
766
金钱
592
HASS币
0
发表于 2018-11-21 08:29:19 | 显示全部楼层
感谢分享,我也是用了旧版本的apk,但模拟器一直闪退,还纳闷是不是模拟器的原因,看来只能用iOS了
回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16009
金钱
11298
HASS币
45
发表于 2018-11-21 09:18:15 | 显示全部楼层
很好很强大,支持楼主发出自己的实践结果!
回复

使用道具 举报

59

主题

731

帖子

4221

积分

论坛元老

Rank: 8Rank: 8

积分
4221
金钱
3485
HASS币
20
发表于 2018-11-21 09:54:08 | 显示全部楼层
感谢LZ,不过网关这块好像不需要填写token就能自动获取的啊?
回复

使用道具 举报

1

主题

41

帖子

197

积分

论坛分享达人

积分
197
金钱
156
HASS币
0
 楼主| 发表于 2018-11-21 11:01:13 | 显示全部楼层
guitengyue 发表于 2018-11-21 09:54
感谢LZ,不过网关这块好像不需要填写token就能自动获取的啊?

我不确信,因为这个是miio 取得的token, 小米网关在HA里实际是要用 xiaomi_aqara来扫描添加,那个里面需要填的是一个key (app里可查到),和这里的miio里扫出来的token不一样。
我理解是xiaomi_aqara 和 xiaomi_miio 是两套不同的玩意。
遗憾的是我 xiaomi_aqara 一直连接不上我的小米网关,查不出原因。看起来好像 我小米网关的 4321和9898端口都是closed状态。
至于 miio里是否支持添加 小米网关,我也不确信。可能要去查下 xiaomi_miio的文档什么的才知道。
回复

使用道具 举报

59

主题

731

帖子

4221

积分

论坛元老

Rank: 8Rank: 8

积分
4221
金钱
3485
HASS币
20
发表于 2018-11-21 13:46:30 | 显示全部楼层
miio我记得在ubuntu中直接输入一段代码,就会扫描所有接入局域网的设备,不过好像仅限wifi连的
回复

使用道具 举报

21

主题

294

帖子

2551

积分

论坛技术达人

积分
2551
金钱
2207
HASS币
180

教程狂人

发表于 2018-11-28 15:40:32 | 显示全部楼层
本帖最后由 Yonsm 于 2018-11-28 15:43 编辑

mark,11-13步获取的结果,和这里说的:https://bbs.hassbian.com/forum.php?mod=viewthread&tid=4085 方法是一样的,前段时间可以用没问题,应该还好的吧
回复

使用道具 举报

1

主题

41

帖子

197

积分

论坛分享达人

积分
197
金钱
156
HASS币
0
 楼主| 发表于 2018-11-28 18:15:07 | 显示全部楼层
Yonsm 发表于 2018-11-28 15:40
mark,11-13步获取的结果,和这里说的:https://bbs.hassbian.com/forum.php?mod=viewthread&tid=4085 方法 ...

对,实际一样的的但用那个提供的脚本更方便自动提取了。
回复

使用道具 举报

11

主题

270

帖子

3019

积分

论坛元老

Rank: 8Rank: 8

积分
3019
金钱
2749
HASS币
10
发表于 2018-11-28 18:19:08 | 显示全部楼层
豌豆荚上可以下载到历史版本的米家APK
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-19 19:32 , Processed in 0.093825 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表