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

 找回密码
 立即注册
查看: 8093|回复: 20

[基础教程] 云米零冷水热水器node-red完美接入。【先分享后提问】

[复制链接]

20

主题

334

帖子

2501

积分

论坛积极会员

积分
2501
金钱
2167
HASS币
0
发表于 2021-12-1 00:38:41 | 显示全部楼层 |阅读模式
本帖最后由 BobbyCoon 于 2021-12-1 21:29 编辑

各位大神看见了,别光看分享啊,看看第二点我提的问题吧,跪求帮忙解决。:'(
   一、先分享云米零冷水热水器的node-red接入
    首先感谢smzdm大神分享的帖子(https://bbs.hassbian.com/thread-9693-1-1.html),这个帖子中,Soloist_lrp大神在39楼分享的插件我能完美接入我的ha-core中,解决了我家中自动热水循环的问题,这个功能也成为了家人使用最为频繁的功能,比如每天起床前自动的热水循环,比如每天晚上洗澡前都习惯的siri一下打开热水循环(或者小爱),但是我最近在尝试迁移到hassos时,发现了问题,我原来在ha中使用的部分三方插件都不能使用了。其中包括我依赖度很高的两个,比如这个云米热水器的第三方插件,ha提示:Platform error device_tracker.linksys_velop - Integration 'yunmi' not found.。我也尝试过用miot_auto插件接入热水器,但是不能实现热水循环的开关。所以,我决定自己折腾了,凭着自己折腾多年的教训(或者说经验),我认真看了smzdm大神分享插件中的代码,虽然看不太懂,但是基本上看出了时通过miio实现的本地接入,而且miio好像在node-red中有。于是我就开始尝试了,今天还让我误打误撞成功了。教程如下:    1.在node-red中安装 node-red-contrib-mi-miio节点,该节点的官方文档https://github.com/YinHangCode/node-red-contrib-mi-miio,大家可以自己看看
这个节点长这样:我们用自定义设备节点,就是最下面那个。
截屏2021-12-01 上午12.09.02.png
    2.在node-red中倒入我给的代码:
[{"id":"5195d2cf43076f80","type":"inject","z":"f3ea0d3851fbb54e","name":"查询热水器状态","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{"cmd":"get"}","payloadType":"json","x":180,"y":140,"wires":[["2ccd143718e78220"]]},{"id":"a1c2dc1161e6d8b6","type":"inject","z":"f3ea0d3851fbb54e","name":"控制水温50度","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{"cmd":"miio","method":"set_temp","value":[50]}","payloadType":"json","x":170,"y":200,"wires":[["2ccd143718e78220"]]},{"id":"ee507146687eb987","type":"inject","z":"f3ea0d3851fbb54e","name":"控制水温40度","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{"cmd":"miio","method":"set_temp","value":[40]}","payloadType":"json","x":170,"y":260,"wires":[["2ccd143718e78220"]]},{"id":"39e05031cab35c85","type":"inject","z":"f3ea0d3851fbb54e","name":"打开热水循环","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{"cmd":"miio","method":"set_preheat_now","value":[1]}","payloadType":"json","x":170,"y":320,"wires":[["2ccd143718e78220"]]},{"id":"4496fb4cf315f08c","type":"inject","z":"f3ea0d3851fbb54e","name":"关闭热水循环","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{"cmd":"miio","method":"set_preheat_now","value":[0]}","payloadType":"json","x":170,"y":360,"wires":[["2ccd143718e78220"]]},{"id":"4e21e34e1aabae8d","type":"debug","z":"f3ea0d3851fbb54e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.result","targetType":"msg","statusVal":"","statusType":"auto","x":580,"y":280,"wires":[]},{"id":"c91799c73708792e","type":"debug","z":"f3ea0d3851fbb54e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.values","targetType":"msg","statusVal":"","statusType":"auto","x":580,"y":320,"wires":[]},{"id":"2ccd143718e78220","type":"Mi-Other","z":"f3ea0d3851fbb54e","name":"热水器","device":"0fcc65c394ae6b4d","x":330,"y":280,"wires":[["4e21e34e1aabae8d","c91799c73708792e"]]},{"id":"0fcc65c394ae6b4d","type":"Mi-Other-Device","deviceName":"热水器","deviceIP":"192.168.0.5","deviceToken":"55add7b10a4a455632551b7f78d3dc8a","deviceSyncInterval":"0","deviceAttributesArr":[{"attribute":"washStatus","setter":""},{"attribute":"velocity","setter":""},{"attribute":"waterTemp","setter":""},{"attribute":"targetTemp","setter":"set_temp"},{"attribute":"errStatus","setter":""},{"attribute":"isPreHeatNow","setter":"set_preheat_now"}]}]
倒入后应该是这个样子的: 截屏2021-12-01 上午12.40.50.png
    4.双击咖啡色的那个节点,添加新的MI-other-divece节点添加你自己的IP和Token,一定要填对,其他不要改然后部署。
截屏2021-12-01 上午12.42.26.png
    5.我的node-red中示范了5个内容,从上到下分别是1.查询热水器状态,返回包括:washStatus(热水器模式,0是关闭,其他分别是什么儿童洗、老人洗之类的,没啥用,但是注意的是,如果热水器正在运行,washStatus是0,和关闭时一样),velocity(流速),waterTemp(实时水温),targetTemp(设定水温,或者叫目标水温),errStatus(错误状态,具体是数字代表啥我也不知道),isPreHeatNow(热水循坏,1是开启,0是关闭,)。输入2和3分别是调节温度,输入4-5分别是打开和关闭热水循环。    6.值得注意的是,控制参数中"value":值上传的是一个数组,比如:"value": [50],如果直接上传数字会出错。
截屏2021-12-01 上午12.45.50.png
    7.这是flow示范了查询热水器实时状态,调整温度,打开关闭热水循环功能,其实,还能控制热水器开关,但是我觉得没用,谁又会去关热水器呢?有了这个flow,怎么接入ha就看各位自己的喜欢了。


二、分享完再提问,我使用的三方插件linksys_velop,https://github.com/AdamNaj/linksys_velop,系统提示:Platform error device_tracker.linksys_velop - Integration 'linksys_velop' not found.。在我迁移到hassos中,也出现了同样的问题,新系统不支持这个插件,我也读了代码,也寄希望于能折腾出像上面一样的使用node-red的解决方案,但是失败了,主要问题在我自己,完全的不懂代码,下面是我认为和核心代码段,我觉得可能就是一个request,其中的self.username、self.password、self.host应该就是路由器的用户名、密码和地址。代码段如下:
    def _make_request(self):
        # Weirdly enough, this doesn't seem to require authentication
        data = [
            {
                "request": {"sinceRevision": 0},
                "action": "",
            }
        ]

        token = b64(bytes(self.username + ":" + self.password, "utf8")).decode("ascii");

        headers = {
                "X-JNAP-Action": "http://linksys.com/jnap/core/Transaction",
                "X-JNAP-Authorization": "Basic " + token
        }
        
        
        return requests.post(
            f"http://{self.host}/JNAP/",
            timeout=DEFAULT_TIMEOUT,
            headers=headers,
            json=data,
        )

求各位大神指点,兄弟在此跪谢,希望大神能给我一个用node-red的解决方案,三方插件用怕了,尤其是长期无人维护的插件,系统升级升着升着就不能用了。我把文件也放下下面,方便大神指点。


应坛子有要求,上传文件

device_tracker.py

3.83 KB, 下载次数: 13

flows-11.json

2.98 KB, 下载次数: 31

评分

参与人数 1金钱 +20 收起 理由
+ 20 感谢楼主分享!

查看全部评分

回复

使用道具 举报

35

主题

986

帖子

4776

积分

论坛元老

Rank: 8Rank: 8

积分
4776
金钱
3790
HASS币
20
发表于 2021-12-1 07:18:42 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

33

主题

2196

帖子

5845

积分

论坛元老

Rank: 8Rank: 8

积分
5845
金钱
3649
HASS币
60
QQ
发表于 2021-12-1 08:20:12 | 显示全部楼层
谢谢分享。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

5

主题

259

帖子

1614

积分

金牌会员

Rank: 6Rank: 6

积分
1614
金钱
1355
HASS币
0
发表于 2021-12-1 13:26:34 | 显示全部楼层
代码报错      SyntaxError: Unexpected token c in JSON at position 211
回复

使用道具 举报

1

主题

92

帖子

816

积分

高级会员

Rank: 4

积分
816
金钱
724
HASS币
0
发表于 2021-12-1 14:33:36 | 显示全部楼层
感谢分享,我回去也试一下
回复

使用道具 举报

20

主题

334

帖子

2501

积分

论坛积极会员

积分
2501
金钱
2167
HASS币
0
 楼主| 发表于 2021-12-1 14:45:58 | 显示全部楼层
damp521 发表于 2021-12-1 13:26
代码报错      SyntaxError: Unexpected token c in JSON at position 211

已经更新,你再试试,开始我直接在json中把token改了,现在我原版拷贝过来了。token记得换
回复

使用道具 举报

77

主题

1392

帖子

2万

积分

元老级技术达人

积分
24882
金钱
23450
HASS币
290
发表于 2021-12-1 15:23:39 | 显示全部楼层
对于很久未维护的第三方插件,给其中的 manifest.json 增加个版本号试试: 比如 "version": "0.0.1"

{
  "domain": "linksys_velop",
  "name": "Linksys Velop",
  "documentation": "https://www.home-assistant.io/components/linksys_velop",
  "requirements": [],
  "dependencies": [],
  "codeowners": ["@adamnaj"],
  "homeassistant": "0.100.0"
  "version": "0.0.1"
}

回复

使用道具 举报

5

主题

259

帖子

1614

积分

金牌会员

Rank: 6Rank: 6

积分
1614
金钱
1355
HASS币
0
发表于 2021-12-1 16:23:03 | 显示全部楼层
BobbyCoon 发表于 2021-12-1 14:45
已经更新,你再试试,开始我直接在json中把token改了,现在我原版拷贝过来了。token记得换 ...

还是一样呀   要不你上传个json文件试试
回复

使用道具 举报

20

主题

334

帖子

2501

积分

论坛积极会员

积分
2501
金钱
2167
HASS币
0
 楼主| 发表于 2021-12-1 21:29:47 | 显示全部楼层
damp521 发表于 2021-12-1 16:23
还是一样呀   要不你上传个json文件试试

已上传,自己下载吧
回复

使用道具 举报

20

主题

334

帖子

2501

积分

论坛积极会员

积分
2501
金钱
2167
HASS币
0
 楼主| 发表于 2021-12-1 22:41:27 | 显示全部楼层
本帖最后由 BobbyCoon 于 2021-12-1 22:48 编辑
dscao 发表于 2021-12-1 15:23
对于很久未维护的第三方插件,给其中的 manifest.json 增加个版本号试试: 比如 "version": "0.0.1"

可以了,太感谢了。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-28 00:51 , Processed in 1.424442 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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