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

 找回密码
 立即注册
查看: 24631|回复: 15

[技术探讨] lifesmart曲线接入home assistant

[复制链接]

4

主题

47

帖子

666

积分

论坛技术达人

积分
666
金钱
604
HASS币
60
发表于 2019-9-22 00:18:28 | 显示全部楼层 |阅读模式
本帖最后由 skyzhishui 于 2020-1-7 23:37 编辑

PS:目前这个项目已经停止更新,改用较为完善的插件形式接入,详见:https://bbs.hassbian.com/thread-8307-1-1.html
--------------------------------------------------------------------------------
去年家里装修准备折腾一下智能家居的东东,当时被lifesmart家的中央空调智控器的支持和流光开关的颜值吸引,陆续续续买了很多他们家的配件。同时也接触到了hass平台,在网上找了一些教程看得云里雾里,一直没能入门。前段时间发现lifesmart也有自己的开放平台了,但是因为对home assistant还处于半入门状态,目前采用了一个曲线办法将lifesmart接入hass,可以实现一些简单的交互。过程比较曲折,在这里分享一下,当做抛砖引玉吧。
一、申请lifesmart开发者账号并添加应用
通过lifesmart开放平台http://www.ilifesmart.com/open申请账号,并添加应用。
随便填一填就可以,大概一到两周,可以申请下来,得到appkey和apptoken。
1.png
二、对lifesmart的api接口进行封装
其实就是.netcore写了一个webapi对lifesmart的api接口进行二次封装(不怎么会python),接受设备状态变动事件,更新设备状态缓存。最初写这个的目的是为了对接domoticz,这里hass也能用。
需要部署一下环境,我把服务打包成了docker镜像:skyzhishui/moguhomeapi:v0.0.1
部署时需另外准备一套mysql数据库用于存放用户token和设备列表之类的,启动容器的一般配置:
docker run -itd \
  --name=homeapi \
  -e TZ=Asia/Shanghai \
  -e MYSQL_HOST=<mysql数据库ip> \
  -e MYSQL_USER=<mysql数据库用户名> \
  -e MYSQL_PWD=<mysql数据库用户密码> \
  -e MYSQL_DATABASE=<mysql数据库名> \
  -e HOME_URL=<认证回调url格式:http://服务器ip:服务端口/api/home> \
  -e APP_KEY=<申请到的appkey> \
  -e APP_TOKEN=<申请到的apptoken> \
  -e MY_TOKEN=<可以自定义> \
  -p 5000:5000 \
  --restart unless-stopped \
  skyzhishui/moguhomeapi:v0.0.1

启动后会自动建这几张表
2.png
第一次使用前需要进行初始化,在浏览器访问http://服务器ip:5000/api/init,会跳转到lifesmart的应用授权界面,这里登陆你的lifesmart用户名和密码就可以。
3.png
点击登陆后会自动跳转到之前设置的回调url+参数,如果url无法打开,可以把url的地址部分改成服务器的内网ip:端口再访问。页面返回ok则表示已经初始化成功,完成后最好重启一下容器。
三、hass的对接
做了几个最基础的环境感应器和开关的栗子
环境感应器选用RESTful Sensor,参考的官方范例,<>中的内容改成你自己的。me、idx值和说明可以在mysql中的devices表和官方设备属性文档中查询到。

sensor
  - platform: rest
    name: room_sensors
    resource: http://<api服务器ip:端口>/api/getjson?me=<设备me属性>&mytoken=<MY_TOKEN>
    json_attributes:
      - T
      - V
      - Z
      - H
    value_template: 'OK'
  - platform: template
    sensors:
      room_temperature:
        friendly_name: '室内温度'
        value_template: '{{ states.sensor.room_sensors.attributes["T"]["v"] }}'
        device_class: temperature
        unit_of_measurement: '°C'
      room_humidity:
        friendly_name: '室内湿度'
        value_template: '{{ states.sensor.room_sensors.attributes["H"]["v"] }}'
        device_class: humidity
        unit_of_measurement: '%'
      room_illuminance:
        friendly_name: '室内光照'
        value_template: '{{ states.sensor.room_sensors.attributes["Z"]["v"] }}'
        device_class: illuminance
        unit_of_measurement: 'lux'
      room_battery:
        friendly_name: '感应器电量'
        value_template: '{{ states.sensor.room_sensors.attributes["V"]["v"] }}'
        device_class: battery
        unit_of_measurement: '%'

大概是这个样子。
4.png
开关使用的Command line Switch实现,基于官方范例

switche
  platform: command_line
  switches:
    light_xuanguan:
      friendly_name: '玄关灯'
      command_on: 'curl -k "http://<api服务器ip:端口>/api/set?me=<设备me属性>&idx=<设备idx属性>&type=0x81&val=1&mytoken=<MY_TOKEN>"'
      command_off: 'curl -k "http://<api服务器ip:端口>/api/set?me=<设备me属性>&idx=<设备idx属性>&type=0x80&val=0&mytoken=<MY_TOKEN>"'
      command_state: 'curl -k --silent "http://<api服务器ip:端口>/api/getinfo?me=<设备me属性>&idx=<设备idx属性>&mytoken=<MY_TOKEN>"'
      value_template: '{{ (value_json.type%2) == 1 }}'

因为开关的状态更新是通过lifesmart的event来实现,有时候更新会没那么及时,待优化。
5.png
附一个电动窗帘的配置,使用是command line cover,不过只能实现开关,还没学会hass怎么弄按照百分比开关窗帘。

cover
  - platform: command_line
    covers:
      keting_cover:
        friendly_name: '客厅窗纱'
        command_open: 'curl -k "http://<api服务器ip:端口>/api/set?me=<设备me属性>&idx=P2&type=0xCF&val=100&mytoken=<MY_TOKEN>"'
        command_close: 'curl -k "http://<api服务器ip:端口>/api/set?me=<设备me属性>&idx=P2&type=0xCF&val=0&mytoken=<MY_TOKEN>"'
        command_stop: 'curl -k "http://<api服务器ip:端口>/api/set?me=<设备me属性>&idx=P2&type=0xCE&val=0x80&mytoken=<MY_TOKEN>"'
        command_state: 'curl -k --silent "http://<api服务器ip:端口>/api/getinfo?me=<设备me属性>&idx=P1&mytoken=<MY_TOKEN>"'
        value_template: "{{ value_json.val }}"

上面是我目前把lifesmart接入到hass中的思路,算比较笨的办法,比较熟悉python的大神可以自己写插件,期待分享。



5.png
4.png
3.png
2.png
1.png

评分

参与人数 2金钱 +28 HASS币 +20 收起 理由
jyz_0501 + 8 论坛有你更精彩!
+ 20 + 20 膜拜大神!

查看全部评分

回复

使用道具 举报

1

主题

90

帖子

1066

积分

金牌会员

Rank: 6Rank: 6

积分
1066
金钱
976
HASS币
0
发表于 2019-9-22 10:25:56 | 显示全部楼层
LifeSmart是云起智能那个吗?他有个很长很帅的智能面板,不知道能不能接入HA
回复

使用道具 举报

4

主题

47

帖子

666

积分

论坛技术达人

积分
666
金钱
604
HASS币
60
 楼主| 发表于 2019-9-22 23:07:22 | 显示全部楼层
kleinsoul 发表于 2019-9-22 10:25
LifeSmart是云起智能那个吗?他有个很长很帅的智能面板,不知道能不能接入HA ...

是的,理论上只要官方文档里支持的设备应该都可以,不过目前发现取不到智能门锁的设备信息,不知道是不是官方限制了。
回复

使用道具 举报

0

主题

128

帖子

1262

积分

金牌会员

Rank: 6Rank: 6

积分
1262
金钱
1134
HASS币
0
发表于 2019-9-25 16:55:58 | 显示全部楼层
感谢分享~~~
回复

使用道具 举报

175

主题

2967

帖子

7606

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7606
金钱
4614
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2019-9-25 21:32:30 | 显示全部楼层
智能门锁一般不会开放权限
回复

使用道具 举报

6

主题

287

帖子

4149

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4149
金钱
3857
HASS币
0
发表于 2019-11-12 11:45:37 | 显示全部楼层
楼主可以整一个ARM64平台的docker镜像吗?
回复

使用道具 举报

4

主题

47

帖子

666

积分

论坛技术达人

积分
666
金钱
604
HASS币
60
 楼主| 发表于 2019-11-14 08:57:19 | 显示全部楼层
Roger 发表于 2019-11-12 11:45
楼主可以整一个ARM64平台的docker镜像吗?

手边上没有ARM64的调试环境呢。。作为python新手最近在艰难的摸索插件开发,后面我会在这个帖子更新的
https://bbs.hassbian.com/thread-8307-1-1.html
回复

使用道具 举报

0

主题

26

帖子

233

积分

中级会员

Rank: 3Rank: 3

积分
233
金钱
207
HASS币
0
发表于 2020-1-7 17:16:04 | 显示全部楼层
跟进跟进,入手了lifesmart的开关和超级碗
试着拓展看看
回复

使用道具 举报

0

主题

34

帖子

332

积分

中级会员

Rank: 3Rank: 3

积分
332
金钱
298
HASS币
0
发表于 2021-8-29 10:06:16 | 显示全部楼层
最近重新看了下lifesmart的文档,应该是要把lifesmart的api对应到hass的配置里。
也就是说lifesmart是依赖其服务器工作的,没法做内网环境。
回复

使用道具 举报

0

主题

25

帖子

142

积分

注册会员

Rank: 2

积分
142
金钱
116
HASS币
0
发表于 2021-12-1 00:07:18 | 显示全部楼层
因为开关的状态更新是通过lifesmart的event来实现,有时候更新会没那么及时,待优化。

请问有优化好了吗?谢谢~!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 07:16 , Processed in 0.092349 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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