hunl1986 发表于 2023-5-27 16:31:21

万和热水器接入HA的详细教程(苹果手机)更新2023-12-28

本帖最后由 hunl1986 于 2024-1-19 22:16 编辑

从零开始万和热水器接入home assistant的详细教程(苹果手机)
第一部份:APP抓包方法一、手机下载Stream和万和智能APP,万和添加热水器,Stream-设置-安装CA证书-下载配置文件,手机设置-通用-VPN与设备管理-Stream证书-安装,手机设置-通用-关于本机-证书信任设置-Stream信任二、打开“快捷指令”,添加操作-APP-万和智能-控制热水器-点击选择设备-热水器-点击选择动作-打开-把名称改为“打开热水器”三、重复第二的操作,把点击选择动作为关闭,名称为“关闭热水器”四、打开Stream-开始抓包,切换到快捷指令-打开热水器-关闭热水器,切换到Stream-关闭抓包-点击抓包历史-历史记录-记录里有四条记录结尾为VoiceControl的记录为操作热水器的命令,从下往上,第一条为打开,第二条为关闭。五、复制执行代码,点击记录-点击右上角上箭头图标-分享到微信。 分享文件内容
>> 本文件内容为 https://rubyapi.vanward.com/api/v1/public-device-service/voiceControl 的请求抓包详情,供您分析和定位问题。

1. 请求内容 Request:

POST /api/v1/public-device-service/voiceControl HTTP/1.1
Host: rubyapi.vanward.com
appId:XXXXXXXXXXXXXX
Accept: */*
timestamp: XXXXXXXXXXXXXX
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-Hans-CN;q=1
signature: XXXXXXXXXXXXXX
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Content-Length: XXXXXXXXXXXXXX
User-Agent: VanwardSiri/0.5.9 (iPhone; iOS 15.7.1; Scale/2.00)
Connection: keep-alive
Cookie: acw_tc=XXXXXXXXXXXXXX
order=XXXXXXXXXXXXXX
2. 响应内容 Response:

HTTP/1.1 200
Date: Sat, 27 May 2023 07:42:09 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 252
Connection: keep-alive
eagleeye-traceid: 0b3c7d7e16851733294908863e84fb

{"Message":"{\"header\":{\"messageId\":\"C5EECF24-56CF-4CF7-A4F4-D14D8ACF023D\",\"name\":\"TurnOnResponse\",\"namespace\":\"Vanward.Iot.Device.Control\",\"payLoadVersion\":1},\"payload\":{\"deviceId\":\"826e7238c021424c9c74c890ab5c5446\"}}","Code":200}

====
该记录由 Stream 抓取,仅用于分析和学习,可 AppStore 搜索『抓包』下载,面向开发者永久免费使用。



appId、signature、timestamp、Content-Length、order为关键执行代码,Cookie有就加上去,没有就不填写
第二部分:Home Assistant执行代码一、在config文件夹新建packages文件夹,在packages里新建以.yaml扩展名的文件(例:heater.yaml)1、复制文件内容并保存,配置-菜单-重启Home assistant-快速重载
**** Hidden Message *****
2、直接自动化创建,在configuration.yaml加入下面代码

homeassistant:
packages: !include_dir_named packages二、Noed-RED-拖一个events:state、一个switch、二个function、一个http response1、events:state设置:Name:热水器开关Setver:选择本机,如没有则新建(点击后面的笔-填写名称、Using the Home Assistant Add-on打勾)Entity:热水器开关(第一新建的辅助元素)2、Switch设置:添加二个值 on、off(第二个点击添加)
3、Function设置:**** Hidden Message *****


4、http respons设置请求方式:POSTURL:为“请求抓包详细”第一段话里的网址,一般为https://rubyapi.vanward.com/api/v1/public-device-service/voiceControl对连接启用Keep-alive:打勾


2023-6-2最近进展,前几天把热水器状态(开关、温度)进行了同步,HA可以与APP状态同时响应,不过HA的刷新时间我设为了二分钟,避免发送太多数据包。代码整理后再发出,因为有一些关键字段要打码。现在在写代码把传感器和实体整合成一个设备来控制,但还没有写完,代码调试当中,后面看看有没有时间把代码写成一个组件,但python不是很熟。要查资料。

2023-6-4,已经上传流程,大家可以更新为自己的关键数据(需要更改:所有的温度设置、打开热水器、关闭热水器、查询状态),经过分析数据好像万和的Cookie是给第三方用的,只要不是抓包万和APP的数据库,其它的包Cookie是长期的。
附件为NOED-red流程
**** Hidden Message *****

2023-6-5,已经完成把传感器与开关整合成一个设备来控制,更新了前面流程,删除了温度+和温度-两个开关。
2023-6-28,经过一段时间使用,发觉操作完热水器后服务器要10秒后才更新状态,如果这时刚好NODE-RED向服务器查询状态,有可能造成打开的热水器自动关闭或关闭热水器时又自动打开,更新了NODE-RED的流程的代码,在操作热水器后2分钟NODE-RED才能向服务器查询状态 。

2023-12-28,10月份的时候不知道是不是万和的服务器流量过大,挂了几次后把查询状态的API给关了,刚好看到论坛有贴子说用了浴控器后热水器会开UDP端口,买了一个试了一下,果然UDP端口开了,干脆把代码全部搬到Node-red用MQTT来控制,使用这个方法不用在packages文件夹新建以.yaml扩展名的文件,状态查询不用经过万和的服务器,直接在UDP里就包含了热水器的所有状态,直接本地化查询 ,现在就差控制本地化了,有了一点眉目,但还没做完所有实验,等忙完期末的工作再继续。(如果没有浴控器的朋友可以使用上面的流程,不过需要把二分钟一次查询状态给关了,或者到海鲜市场买一个,开了UDP后就卖出去,连接一次就永久开了,不过记得在home assistant服务器开UDP7799端口。)
注意:
1、需要安装mqtt服务器,可以去加载项里安装
2、需要在集成里添加mqtt客户端
3、需要更改node-red流程里的mqtt-broker节点-安全里的帐号密码

2024-1-19,我自己的机器可以本地控制了,但发到其它坛友那里就不行了,不能通用,那位兄弟可以抓一下自己浴控器的操作数据包私发给我,我看看第一个参数是如何生成的,要看多几个设备才能分析,麻烦发上来的时候附一下浴控制器和热水器的局域网IP地址。


**** Hidden Message *****

zhuguoqing 发表于 2023-5-27 16:55:25

可以的,不错

li2244578 发表于 2023-5-27 17:31:20

学习下 .

lindachung 发表于 2023-5-27 17:44:01

主要是cookie多久过期呢..
还是说可以.自动快捷指令更新cookie

hunl1986 发表于 2023-5-27 17:48:17

lindachung 发表于 2023-5-27 17:44
主要是cookie多久过期呢..
还是说可以.自动快捷指令更新cookie

用了半个多月,暂时没发现有过期

838055757 发表于 2023-5-27 22:21:04

学习到了

lexcao 发表于 2023-5-28 17:51:41

是否考虑直接用HA自动化实现呢?

wz2020 发表于 2023-5-28 22:08:50


学习到了

hunl1986 发表于 2023-5-28 23:36:03

lexcao 发表于 2023-5-28 17:51
是否考虑直接用HA自动化实现呢?

其实是一样的道理,只不过用的方法不一样,自行化也可以做到
不过Node-RED方便一点

wjx 发表于 2023-5-30 11:56:58

学习一下
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 万和热水器接入HA的详细教程(苹果手机)更新2023-12-28