前言
之前弄了一个比较粗糙的lifesmart的开关插件,其实我自己还在用老办法用docker服务来转发请求,最近来了点兴致把插件重新弄了下,支持的设备也多了一些,通过websocket实时获取设备状态反馈,这样像动态感应器之类的设备也可以接入了,话说ls家的动态感应器可以设置重置时间(最短6秒),就是价格坑爹。跑了几天暂时没发现啥大的Bug,有需要的小伙伴可以自行获取。希望lifesmart有朝一日能把局域网控制权限开放给第三方吧,毕竟都上了贼船了,插件还在老地方:https://github.com/skyzhishui/custom_components
更新说明
----[2019年12月6日更新]----
新增支持设备
中央空调面板:V_AIR_P
智能门锁反馈信息:SL_LK_LS、SL_LK_GTM、SL_LK_AG、SL_LK_SG、SL_LK_YL
支持的设备
开关:
这个基本保持了原有的支持列表,包括:插座系列、传统开关、恒星开关、流光开关之类大部分有的没的。
灯光:
目前只支持超级碗夜灯,谁让我只有这玩意,支持RGB调色。
万能遥控:
参考之前的服务调用模式,send_keys和send_ackeys分别用来调用普通红外遥控和空调遥控。
电动窗帘:
仅支持杜亚电机,貌似网上买的都是这款,功能还算比较完善,可以实时反馈运行状态并按百分比控制。
二进制感应器:
支持门磁和动态感应器,动态感应器和小米人体感应器对比了下效果差不多,比小米的优势是重置时间可自定义,但是价格。。。嗯
环境感应器:
支持多功能环境感应器、甲醛感应器和燃气感应器,主要是这几个我都有,其他的暂时还不支持。
中央空调控制器:
我买的是那种小的智控器模块,现在貌似都是中弘那款,应该是通用的。
智能门锁:
因为官方api限制,暂时无法通过设备列表获取到智能门锁,但是可以通过websocket收到门锁开关门事件,所以在门锁触发过一次以后这个设备会被自动添加,val字段对应开锁用户和开锁方式。目前显示比较简单,后续考虑优化。
使用说明
获取应用授权和token信息:
使用有一定的上手难度,主要是申请开发者应用和获取usertoken授权的生成,申请开发者应用可以参考我之前的帖子:https://bbs.hassbian.com/forum.php?mod=viewthread&tid=8270
usertoken的生成需要自己写个回调接口,也可以用个脚本生成url手动复制到浏览器里。
import time
import hashlib
tick = int(time.time())
appkey = "your_appkey"
callbackurl = "http://localhost"
apptoken = "your_apptoken"
sdata = "appkey=" + appkey
sdata += "&auth_callback=" + callbackurl
sdata += "&time=" + str(tick)
sdata += "&apptoken=" + apptoken
sign = hashlib.md5(sdata.encode(encoding='UTF-8')).hexdigest()
url = "https://api.ilifesmart.com/app/auth.authorize?id=001&"
url += "&appkey=" + appkey
url += "&time=" + str(tick)
url += "&auth_callback=" + callbackurl
url += "&sign=" + sign
url += "&lang=zh"
print(url)
插件部署:
把lifesmart目录放置在config/custom_components/下
在configuration.yaml文件中增加配置:
lifesmart:
appkey: "your_appkey"
apptoken: "your_apptoken"
usertoken: "your_usertoken"
userid: "your_userid"
exclude:
- xxxx #需要屏蔽的设备me号
万能遥控器使用:
和之前使用方法一样,在超级碗的属性栏中增加了超级碗包含遥控器的信息,方便自行配置。
send_keys:发射普通遥控器指令
send_ackeys:发射空调遥控器指令(这玩意因为没空调设备调试,所以能不能用还未知)
send_keys入参如下,相关入参都可以超级碗的属性栏中找到。
{ "me": "0010",
"agt": "_xXXXXXXXXXXXXXXXXX",
"ai": "AI_IR_xxxx_xxxxxxxx",
"category": "custom",
"brand": "custom",
"keys": "["key"]"
}
要注意的是keys中括号里的指令码必须用双引号,送参的时候要用转义符,如{"keys":[\"key\"]}
send_ackeys入参多了几项:
{
"me": "0010",
"agt": "_xXXXXXXXXXXXXXXXXX",
"ai": "AI_IR_xxxx_xxxxxxxx",
"category": "custom",
"brand": "custom",
"keys": "["key"]",
"power": 1,
"mode": 0,
"temp": 26,
"wind": 2,
"swing": 1
}
开关和插座都能接入
特别说明一下关于userid和usertoken的获取:
userid:其实比较简单,在lifesmart app中的用户编号就是userid。usertoken:
在安装home assistant的设备上使用上面的脚本保存为ls.py
import time
import hashlib
tick = int(time.time())
appkey = "改成你的appkey"
callbackurl = "http://localhost"
apptoken = "改成你的apptoken"
sdata = "appkey=" + appkey
sdata += "&auth_callback=" + callbackurl
sdata += "&time=" + str(tick)
sdata += "&apptoken=" + apptoken
sign = hashlib.md5(sdata.encode(encoding='UTF-8')).hexdigest()
url = "https://api.ilifesmart.com/app/auth.authorize?id=001&"
url += "&appkey=" + appkey
url += "&time=" + str(tick)
url += "&auth_callback=" + callbackurl
url += "&sign=" + sign
url += "&lang=zh"
print(url)
执行python3 ls.py会输出一个url,把这个url复制到浏览器访问:
这里授权登录的应用名就是你之前申请的开发者应用了,输入你的lifesmart账号和密码登录,页面会跳转到之前脚本里callbackurl(脚本里写的localhost,跳转页面打不开是正常的),在跳转页面的地址栏里找到"usertoken=xxx",就是你的usertoken了,expiredtime是usertoken的到期时间,有效期一般是一年。
转载:skyzhishui
源文地址:https://bbs.hassbian.com/thread-8307-1-1.html