本帖最后由 hudan717 于 2023-2-24 00:37 编辑
2.24更新
1.修改了一个在线下空调面板上操作时可能导致MQTT状态不同步更新的小BUG,已经在原文的MQTT代码中更新,照搬即可
2.原先NR中是将状态流同统一的节点去分配,可能导致各个空调之间状态发生同步。因此建议大家把每个分机的控制流跟状态流都分开,直接在原来的NR流附件中编辑分离开即可。改成下图这样,节点内容不变,我就不另外上传附件了。
看下大致效果
可以注意到,HA上发送指令以后,状态并不是实时更新的,而是需要通过MQTT返回的状态来进行实体的状态变更
以下原文
据说海信是第一家支持直连HomeKit的中央空调厂家,可惜我买的并不是那个型号,也没了解过价格。
这个教程理论上支持所有支持接入“海信Ai享家”APP的空调设备,包括海信的“荣耀家”“Ai家”“别墅家”等等。
设备控制基于MQTT实现,因此如果其他品牌的空调也能通过各自的APP进行远程控制,那么理论上只要修改抓包参数,也能实现相同效果。
开始抓包
打开Stream和海信Ai享家APP
在APP任意发送一个控制指令
随后查看Stream的抓包结果
可以看到只有两种POST,分别是Ctrl跟Status,显而易见一个是发送控制,一个是获取状态
将两种报文都导出,可以看到类似的东西
红框中的就是最重要的认证密钥,海信使用的是比较原始的Bearer Token。因此可以省去验证,只要不修改APP登录密码,理论上就可以一直用
但是,在成功抓包并在HA运行成功后,非必要,不要重新打开APP进行控制,否则会刷新Token,导致原来抓包来的这个密钥失效,需要重新获取并在Nodered上进行修改!
抓包完成,我们开始配置Nodered跟MQTT
在Configuration.yaml添加如下代码(上图是我把MQTT单独分开一个文档存到package,正常情况下只要在Configuration中配置即可)
mqtt:
climate:
- name: '卧室空调'
modes: #空调支持的模式
- "off"
- "cool"
- "dry"
- "fan_only"
- "heat"
- "auto"
fan_modes: #风力
- "low"
- "medium"
- "high"
max_temp: 32 #空调最高温度
min_temp: 16 #最低温度
mode_command_topic: "/woshikongtiao/mode" #模式控制,冒号后面的mqtt地址自行修改,以下相同
temperature_command_topic: "/woshikongtiao/temp" #温度控制
fan_mode_command_topic: "/woshikongtiao/fan" #风力控制
current_temperature_topic: "/woshikongtiao/tempnow" #当前室温(如果空调本身由这个功能可以加上)
fan_mode_state_topic: "/woshikongtiao/fannow" #当前风力状态,用来进行同步,以下相同
mode_state_topic: "/woshikongtiao/state" #当前模式
temperature_state_topic: "/woshikongtiao/tempstate" #当前选择的温度
代码是一台内机,有几台就要继续往下加
配置好MQTT,可以先重启一下HA让设置生效,方便接下来在NR中进行调试
来到Nodered
flows.zip
(8.71 KB, 下载次数: 102)
将提供的流导入以后,把自己抓包的TXT中的相关参数填入我打#的地方
其中控制指令中需要自己在ctrllist中进行修改,找到
{"iuIdList":[{"iezCode":"861883……………………这段指令中的"ctrljson":{ xxxxx },更换成对应的指令,即可实现控制
低风:"ctrlJson": { "wind": 1 }
中风:"ctrlJson": { "wind": 2 }
高风:"ctrlJson": { "wind": 3 }
关闭:"ctrlJson": { "onoff": 0 }
打开:"ctrlJson": { "onoff": 1 }
制冷:"ctrlJson": { "mode": 1 }
除湿:"ctrlJson": { "mode": 2 }
送风:"ctrlJson": { "mode": 3 }
制热:"ctrlJson": { "mode": 4 }
温度调节:"ctrlJson": { "temp": 16 } #温度默认就填写16即可,因为我在流中需要搜索16并替换成你设置的温度来实现控制
在HA中把生成的空调实体接入到homekit,调试无问题后就可以开始使用了,记住,一旦调试通过,没有事情就不要重新打开APP了
这个教程相对比较小众,但是作为抛砖引玉,其他品牌的中央空调如果也能抓到包的话,稍微修改一下流也能实现相同的控制。
帖子写的比较潦草,也没排版,如果有其他问题的话欢迎留言。
|