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

 找回密码
 立即注册
查看: 10578|回复: 6

[进阶教程] 小米有品Wifi窗帘电机接入天猫精灵

[复制链接]

1

主题

79

帖子

1006

积分

金牌会员

Rank: 6Rank: 6

积分
1006
金钱
927
HASS币
0
发表于 2021-2-4 18:40:04 | 显示全部楼层 |阅读模式
本帖最后由 sdfd 于 2021-2-4 20:25 编辑

接入环境说明

1.HA 安装环境为 hassio
2.窗帘电机为小米有品智能窗帘电机 Wifi 版本,型号为lumi.curtain.hagl05
3.已通过 Supervisor 安装 Node-RED
4.窗帘电机已经接入 HA 且 HA 能正常控制。接入方式我使用的是 @anlong 大佬的插件,详细见 小米MIoT设备自动识别接入HA插件
5.接入天猫精灵方案参考 @hunterfox 介绍的方案 https://bbs.hassbian.com/thread-11927-1-1.html
6.在满足以上条件情况下请继续往下看正文

阿里云生活物联网平台产品创建

1.注册并登录阿里云生活物联网平台 https://living.aliyun.com,建议使用天猫精灵绑定的支付宝或者淘宝账号注册登录。
2.点击创建项目,选择自有品牌项目
QQ图片20210204112513.png
3.创建完成后前往项目,点击创建新产品,按下图所示进行填写和选择
QQ截图20210204112812.jpg
4.创建完成后前往产品页面,在功能定义页面去掉无关功能,只保留窗帘控制,然后再添加窗帘打开位置功能,最终功能列表如下:
QQ截图20210204113242.jpg
5.点下一步进入人机交互页面,打开使用公版 APP 开关
QQ截图20210204113543.jpg
6.在产品展示也补充名称后保存,然后选择设备面板,在设备面板页面点击未设置,选择或编辑面板,默认面板因有电源开关键,与我们的功能不符,保存时会提示功能不一致,可以忽略。强迫症患者可点击编辑去掉电源按钮或者自己全新设计页面。
QQ截图20210204113831.jpg

QQ截图20210204113856.jpg
7.点击下一步进入设备调试页面,拉到最后选择未认证模块,同意声明后进入模组信息页面
QQ截图20210204162150.jpg
点击新增测试设备,设置DeviceName
QQ截图20210204162246.jpg
生成设备如下,新增的设备状态是未激活,图中是我已经连接的设备:
QQ截图20210204164701.jpg
8.点击查看,就能看到设备的相关信息,以下图中的3项是后面需要用到的信息
QQ图片20210204165405.png
到这里,阿里平台的工作基本完成,后面的操作需要在 Node-RED 中进行配置

Node-RED 中创建流实现天猫精灵控制

1.打开 Node-RED 页面,点击节点管理,切换到安装 Tap 页,分别输入node-red-contrib-image-outputnode-red-contrib-aliyun-livinglink进行搜索并安装。这里有个坑,安装node-red-contrib-aliyun-livinglink 的时候装了很长时间都装不上,怀疑是源的问题,就进入 Node-RED 的 Docker 通过指定阿里源的方式进行安装,但是安装后重启就没了,不知道为什么,懂的大佬可以帮忙解释下。没办法,最终通过在页面上传 tar 包,再进入 Docker 通过指定源的命令进行安装才成功安装(直接安装也是失败,上传 tar 包安装也需要连接 NPM 源。。。)。有此问题的可以这么尝试下,具体操作方式我就不写了,有问题回帖问吧。
QQ截图20210204172429.jpg

QQ截图20210204172727.jpg
2.节点安装完成后就可以进行流配置了,先拖一个 aliyun 节点到流程中,双击打开配置,将上个章节得到的测试设备信息对应填入即可
QQ截图20210204173630.jpg

QQ截图20210204173958.jpg
3.再拖一个 image 节点到页面,并将 aliyun 节点与 image 节点进行连接,连好后如图:
QQ截图20210204174608.jpg
4.然后拖一个 function 节点,双击进行配置,输出设置成2,函数中填入如下函数:

var new_msg = {payload:""}
switch(msg.payload.curtainConrtol){
    case 0:
        new_msg.payload = "close";
        break;
    case 1:
        new_msg.payload = "open";
        break;
    case 2:
        new_msg.payload = "pause";
        break;
    default:
        new_msg.payload = "";
}
if (new_msg.payload == "" && msg.payload.curtainPosition >= 0){
    if (msg.payload.curtainPosition > 100)
        new_msg.payload = 100;
    else
        new_msg.payload = msg.payload.curtainPosition;
    return [null,new_msg];
}
else
    return [new_msg,null];

QQ截图20210204174934.jpg
5.将 aliyun 节点连接到 function 节点,再拖 1 个 switch 节点,添加 3 个输出,如图进行配置:
QQ截图20210204175333.jpg
6.将 function 节点输出连接 switch 输入,再拖 4 个 home assistant 下的 call service 节点,前 3 个节点的 Service 依次配置成open_cover,close_cover,stop_cover。Server 默认是 Home Assistant,正常情况下不需要修改。Domain 选择 cover,Entity ID 填写你需要控制的窗帘电机的 Entity ID,可从 HA 集成中的实体注册表中查询。第 4 个节点 Service 配置成 set_cover_position,同时在 Data 项中使用表达式模式,填入{"position":payload}
QQ图片20210204175853.png

QQ截图20210204180859.jpg

QQ截图20210204180727.jpg

  1. Switch 节点的 3 个输出依次与前 3 个 call service 节点连接,function 节点的第 2 个输出与第 4 个 call service 连接,连接好后如图所示:
    QQ截图20210204181540.jpg
    图中 aliyun 节点后还增加了 debug 节点,用来获取 aliyun 节点的信息,确认是否有命令发出,非必须。
    8.按以上步骤配置好后即可点击部署对流进行部署了,部署后可看到 aliyun 节点的状态变成已连接,image 节点显示出二维码
    QQ截图20210204181921.jpg
    9.在应用商店搜索云智能或者在上一章第 6 步中设备面板页点击右侧"立即安装"按钮获取云智能 APP 下载二维码进行下载安装,安装后进行注册登录,在我的中选择的更多服务选择天猫精灵,与天猫精灵进行绑定。绑定后在我的家页面点"+"号扫描二维码添加设备,添加后即可看到窗帘设备,点开后显示你配置的公版 APP 页面。
    1247845569.png
    10.使用上面的页面进行控制,查看设备是否能够正常控制,如有异常可根据前面步骤进行确认是哪里的问题,并查看相关log。
    11.如果能正常控制,打开天猫精灵 APP 应该能够看到此窗帘设备,设置房间和名称后即可通过天猫精灵对窗帘进行控制。比如说"天猫精灵,打开客厅窗帘",客厅窗帘就会自动打开。
    教程到此基本可以结束了,有问题可以在帖子下回复。最后附上我的设备流,只需按需修改 aliyun 节点的三元组数据和需要控制的窗帘 Entity ID 即可。
    flows1.zip (1.69 KB, 下载次数: 9)

评分

参与人数 2金钱 +25 收起 理由
antsunzj + 20 虽然看不懂,但感觉很厉害的样子。.
Magic_Shine + 5 感谢楼主分享!

查看全部评分

回复

使用道具 举报

1

主题

15

帖子

130

积分

注册会员

Rank: 2

积分
130
金钱
115
HASS币
0
发表于 2021-2-4 18:45:16 | 显示全部楼层
大佬威武,教程非常详细,这才是好的教程贴,小白也能看懂,再写点别的教程
回复

使用道具 举报

1

主题

79

帖子

1006

积分

金牌会员

Rank: 6Rank: 6

积分
1006
金钱
927
HASS币
0
 楼主| 发表于 2021-2-4 18:48:53 | 显示全部楼层
Magic_Shine 发表于 2021-2-4 18:45
大佬威武,教程非常详细,这才是好的教程贴,小白也能看懂,再写点别的教程
...

折腾新东西了再写,写这个老费劲了
回复

使用道具 举报

9

主题

360

帖子

1192

积分

金牌会员

Rank: 6Rank: 6

积分
1192
金钱
832
HASS币
0
发表于 2021-2-4 21:48:16 | 显示全部楼层
你的天猫和云智能能获取窗帘的状态吗?
回复

使用道具 举报

1

主题

79

帖子

1006

积分

金牌会员

Rank: 6Rank: 6

积分
1006
金钱
927
HASS币
0
 楼主| 发表于 2021-2-5 13:21:17 | 显示全部楼层
tiger81 发表于 2021-2-4 21:48
你的天猫和云智能能获取窗帘的状态吗?

不能,没有给云智能反馈,我看看能不能做。
回复

使用道具 举报

2

主题

33

帖子

782

积分

高级会员

Rank: 4

积分
782
金钱
749
HASS币
0
发表于 2025-1-3 14:03:43 | 显示全部楼层
sdfd 发表于 2021-2-5 13:21
不能,没有给云智能反馈,我看看能不能做。

学习了,期待有状态反馈就更赞了。
回复

使用道具 举报

2

主题

33

帖子

782

积分

高级会员

Rank: 4

积分
782
金钱
749
HASS币
0
发表于 2025-1-11 22:00:50 | 显示全部楼层
本帖最后由 a1318321 于 2025-1-12 14:41 编辑

反馈做好了,但是位置反馈还没搞定。暂时不搞了。可以语音,有反馈,够了。
[{"id":"f35e1b4977c45736","type":"function","z":"e0634090fdd89064","name":"","func":"var new_msg = { payload: ""}\nswitch (msg.payload.params.curtainConrtol){\n    case 0:\n        new_msg.payload = "close";\n        break;\n    case 1:\n        new_msg.payload = "open";\n        break;\n    case 2:\n        new_msg.payload = "pause";\n        break;\n    default:\n        new_msg.payload = "";\n}\nif (new_msg.payload == "" && msg.payload.curtainPosition >= 0){\n    if (msg.payload.curtainPosition > 100)\n        new_msg.payload = 100;\n    else\n        new_msg.payload = msg.payload.curtainPosition;\n    return [null,new_msg];\n}\nelse\n    return [new_msg,null];","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":840,"wires":[["4c0576e048a51a87"],["da96dadf79ea5d12"]]},{"id":"4c0576e048a51a87","type":"switch","z":"e0634090fdd89064","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"open","vt":"str"},{"t":"eq","v":"close","vt":"str"},{"t":"eq","v":"pause","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":410,"y":840,"wires":[["3c2fc2b0fe3f4a13"],["55fde470256f6d6e"],["6007d3a7805f6d48"]]},{"id":"ed29174aacc017db","type":"mqtt in","z":"e0634090fdd89064","name":"客厅窗帘","topic":"/sys/XXX/ketingchuanglian/thing/service/property/set","qos":"2","datatype":"json","broker":"f05fdcb7763bd1a4","nl":false,"rap":true,"rh":0,"inputs":0,"x":140,"y":840,"wires":[["f35e1b4977c45736"]]},{"id":"3c2fc2b0fe3f4a13","type":"api-call-service","z":"e0634090fdd89064","name":"打开窗帘","server":"3a6eb300.d9fa6c","version":7,"debugenabled":false,"action":"cover.open_cover","floorId":[],"areaId":[],"deviceId":["39ef9201afd61dbb6ef5ab61246fbc2f"],"entityId":[],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"cover","service":"open_cover","x":580,"y":780,"wires":[[]]},{"id":"55fde470256f6d6e","type":"api-call-service","z":"e0634090fdd89064","name":"关闭窗帘","server":"3a6eb300.d9fa6c","version":7,"debugenabled":false,"action":"cover.close_cover","floorId":[],"areaId":[],"deviceId":["39ef9201afd61dbb6ef5ab61246fbc2f"],"entityId":[],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"cover","service":"close_cover","x":580,"y":840,"wires":[[]]},{"id":"6007d3a7805f6d48","type":"api-call-service","z":"e0634090fdd89064","name":"窗帘暂停","server":"3a6eb300.d9fa6c","version":7,"debugenabled":false,"action":"cover.stop_cover","floorId":[],"areaId":[],"deviceId":["39ef9201afd61dbb6ef5ab61246fbc2f"],"entityId":[],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"cover","service":"stop_cover","x":580,"y":900,"wires":[[]]},{"id":"da96dadf79ea5d12","type":"api-call-service","z":"e0634090fdd89064","name":"窗帘位置","server":"3a6eb300.d9fa6c","version":7,"debugenabled":false,"action":"cover.set_cover_position","floorId":[],"areaId":[],"deviceId":["39ef9201afd61dbb6ef5ab61246fbc2f"],"entityId":[],"labelId":[],"data":"{position:payload}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"cover","service":"set_cover_position","x":400,"y":900,"wires":[[]]},{"id":"c3c0061691aed038","type":"server-state-changed","z":"e0634090fdd89064","name":"获取客厅窗帘状态","server":"75d68e9b.d201d","version":6,"outputs":1,"exposeAsEntityConfig":"","entities":{"entity":["cover.lemesh_cn_1081304925_cura01_s_2"],"substring":[],"regex":[]},"outputInitially":true,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":850,"y":840,"wires":[["bbf9ad69ed1a18de"]]},{"id":"bbf9ad69ed1a18de","type":"function","z":"e0634090fdd89064","name":"处理状态并生成mqtt消息","func":"let curtainConrtol = msg.payload === 'open' ? 1 : 0;\nmsg.payload = {\n    "version": "1.0",\n    "sys": {\n        "ack": 1\n    },\n    "params": {\n        "curtainConrtol": curtainConrtol,\n        "powerstate": 1,\n    },\n    "method": "thing.event.property.post"\n};\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1090,"y":840,"wires":[["e4f80e8c437edf88"]]},{"id":"e4f80e8c437edf88","type":"mqtt out","z":"e0634090fdd89064","name":"反馈窗帘状态","topic":"/sys/XXX/ketingchuanglian/thing/event/property/post","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"4d2516b675ae7133","x":1360,"y":840,"wires":[]},{"id":"f05fdcb7763bd1a4","type":"mqtt-broker","name":"客厅窗帘","broker":"XXX.iot-as-mqtt.cn-shanghai.aliyuncs.com","port":"1883","clientid":"XXX.ketingchuanglian|securemode=2,signmethod=hmacsha256,timestamp=1735730212983|","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"3a6eb300.d9fa6c","type":"server","name":"Home Assistant","addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false},{"id":"75d68e9b.d201d","type":"server","name":"Home Assistant","addon":true},{"id":"4d2516b675ae7133","type":"mqtt-broker","name":"客厅窗纱","broker":"XXX.iot-as-mqtt.cn-shanghai.aliyuncs.com","port":"1883","clientid":"XXX.ketingchuangsha|securemode=2,signmethod=hmacsha256,timestamp=1735730299381|","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-2-3 00:07 , Processed in 0.111791 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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