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

 找回密码
 立即注册
查看: 17414|回复: 22

[修仙教程] 【屠龙秘术第一式】青春永驻。0.77获取长期令牌的方法

[复制链接]

1

主题

32

帖子

221

积分

论坛技术达人

积分
221
金钱
189
HASS币
0
发表于 2018-8-30 08:38:27 | 显示全部楼层 |阅读模式
本帖最后由 狮心哥哥 于 2018-8-29 16:40 编辑

Gist连接

暂时解决没有长期生效令牌的方案。适用0.77,至少需要创建一个用户。

执行以下脚本,注意修改配置文件目录。把输出的Bearer Token记录下来。
然后就可以使用这个Token进行API访问了。


import os
from datetime import timedelta

from homeassistant import auth, core, config as conf_util

CLIENT_ID = 'long_lived_client'
LIFE_TIME = timedelta(days=3650)


async def create_refresh_token(auth_mgr: auth.AuthManager,
                               owner: auth.models.User):
    """Create a refresh token for owner."""
    refresh_token = auth.models.RefreshToken(
        user=owner,
        access_token_expiration=LIFE_TIME,
        client_id=CLIENT_ID,
    )
    owner.refresh_tokens[refresh_token.id] = refresh_token

    # hack code to save refresh_token
    await auth_mgr._store._store.async_save(
        auth_mgr._store._data_to_save())

    print('Created a new refresh token for {}: {}'.format(
        CLIENT_ID, refresh_token.id))
    return refresh_token


async def get_long_live_access_token(auth_mgr: auth.AuthManager):
    """Create a bearer token for owner."""
    owner = [u for u in await auth_mgr.async_get_users() if u.is_owner][0]
    print('Owner name is {}\n'.format(owner.name))

    refresh_token = None
    for token in owner.refresh_tokens.values():
        if token.client_id == CLIENT_ID:
            refresh_token = token
            break

    if not refresh_token:
        refresh_token = await create_refresh_token(auth_mgr, owner)

    # get access_token, it won't saved
    access_token = auth_mgr.async_create_access_token(refresh_token)
    print('Add following HTTP header to your REST API'
          ' and Websocket API request:')
    print('Authorization: Bearer {}'.format(access_token))


# change to your config path
config_dir = conf_util.get_default_config_dir()
config_path = conf_util.ensure_config_exists(config_dir)
print('Loading config from {}'.format(config_path))
config_dict = conf_util.load_yaml_config_file(config_path)
core_config = config_dict.get('homeassistant', {})

hass = core.HomeAssistant()
hass.config.config_dir = os.path.abspath(os.path.dirname(config_path))
hass.loop.run_until_complete(
    conf_util.async_process_ha_core_config(
        hass, core_config, False, False))
hass.loop.run_until_complete(
    get_long_live_access_token(hass.auth))


评分

参与人数 2金钱 +40 收起 理由
Mirukuteii + 20 膜拜官方认证系统缔造者
+ 20 目测楼主是大神,技术达人走起。.

查看全部评分

回复

使用道具 举报

8

主题

220

帖子

1326

积分

金牌会员

Rank: 6Rank: 6

积分
1326
金钱
1101
HASS币
0
发表于 2018-8-30 09:39:31 | 显示全部楼层
帮LZ顶上去,感谢lz分享精神
回复

使用道具 举报

73

主题

1165

帖子

6641

积分

论坛元老

Rank: 8Rank: 8

积分
6641
金钱
5471
HASS币
30
发表于 2018-8-30 09:44:54 | 显示全部楼层
GPSlogger,具体应该怎么设置,能给个详细教程吗?
回复

使用道具 举报

5

主题

95

帖子

608

积分

高级会员

Rank: 4

积分
608
金钱
513
HASS币
0
发表于 2018-8-30 09:46:22 | 显示全部楼层
虽然不明所以,还是要顶一下
回复

使用道具 举报

12

主题

545

帖子

2037

积分

金牌会员

Rank: 6Rank: 6

积分
2037
金钱
1492
HASS币
0
发表于 2018-8-30 11:08:39 | 显示全部楼层
3650天的期限,哈哈。
回复

使用道具 举报

39

主题

278

帖子

884

积分

高级会员

Rank: 4

积分
884
金钱
605
HASS币
0
发表于 2018-8-30 16:35:14 | 显示全部楼层
66666666666666
回复

使用道具 举报

73

主题

1165

帖子

6641

积分

论坛元老

Rank: 8Rank: 8

积分
6641
金钱
5471
HASS币
30
发表于 2018-9-2 20:40:30 | 显示全部楼层
执行后报错:

  File "long_live_access_token.py", line 10
    async def create_refresh_token(auth_mgr: auth.AuthManager,
            ^
SyntaxError: invalid syntax
回复

使用道具 举报

1

主题

32

帖子

221

积分

论坛技术达人

积分
221
金钱
189
HASS币
0
 楼主| 发表于 2018-9-4 07:45:09 | 显示全部楼层
Python 3.5及以上
回复

使用道具 举报

2

主题

82

帖子

1305

积分

金牌会员

Rank: 6Rank: 6

积分
1305
金钱
1223
HASS币
0
发表于 2018-9-4 14:53:31 | 显示全部楼层
Traceback (most recent call last):
  File "long_live_access_token.py", line 4, in <module>
    from homeassistant import auth, core, config as conf_util
ImportError: No module named 'homeassistant'

这个怎么解?
回复

使用道具 举报

12

主题

545

帖子

2037

积分

金牌会员

Rank: 6Rank: 6

积分
2037
金钱
1492
HASS币
0
发表于 2018-9-5 12:00:49 | 显示全部楼层
大神牛逼,刚在gayhub看到你了。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 07:01 , Processed in 1.159623 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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