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

 找回密码
 立即注册
楼主: mypal

[技术讨论] 大金空调DS-AIR及『金制空气』接入HA

  [复制链接]

0

主题

27

帖子

467

积分

中级会员

Rank: 3Rank: 3

积分
467
金钱
440
HASS币
0
发表于 2019-12-16 18:41:04 | 显示全部楼层
我家也是大金空调但是始终没能成功
总是报错
2019-12-16 10:35:25 ERROR (MainThread) [homeassistant.components.climate] Setup of platform ds_air is taking longer than 60 seconds. Startup will proceed without waiting any longer.
回复

使用道具 举报

2

主题

54

帖子

565

积分

论坛技术达人

积分
565
金钱
506
HASS币
20
 楼主| 发表于 2020-3-8 22:03:25 | 显示全部楼层
xairt 发表于 2019-12-16 18:41
我家也是大金空调但是始终没能成功
总是报错
2019-12-16 10:35:25 ERROR (MainThread) [homeassistant.comp ...

还有没有更多的报错信息了?日志级别调整下?
回复

使用道具 举报

0

主题

21

帖子

103

积分

注册会员

Rank: 2

积分
103
金钱
82
HASS币
0
发表于 2020-3-15 12:12:46 | 显示全部楼层
金制空气app的应该没法用这个插件,可能需要改写才能用
回复

使用道具 举报

2

主题

54

帖子

565

积分

论坛技术达人

积分
565
金钱
506
HASS币
20
 楼主| 发表于 2020-3-18 12:29:33 | 显示全部楼层
muggle 发表于 2020-3-15 12:12
金制空气app的应该没法用这个插件,可能需要改写才能用

只支持可以使用DS-AIR的设备哈,我没有可以用金制空气的设备,没办法解析通讯协议和调试
回复

使用道具 举报

0

主题

19

帖子

56

积分

注册会员

Rank: 2

积分
56
金钱
37
HASS币
0
发表于 2020-3-26 14:25:16 | 显示全部楼层
学习了
回复

使用道具 举报

2

主题

14

帖子

131

积分

论坛分享达人

积分
131
金钱
117
HASS币
0
发表于 2020-6-28 14:29:29 | 显示全部楼层
HA 0.111.4 没有了那个 ClimateDevice, 改成了 ClimateEntity 。 我手工修改了代码中的这个类
但是 日记里还是有警告
日志详细信息( WARNING )
Logger: homeassistant.components.climate
Source: __main__.py:356
Integration: 空调 (documentation, issues)
First occurred: 2020年6月27日 下午8:38:28 (1 occurrences)
Last logged: 2020年6月27日 下午8:38:28

Setup of climate platform ds_air is taking over 10 seconds.
回复

使用道具 举报

2

主题

54

帖子

565

积分

论坛技术达人

积分
565
金钱
506
HASS币
20
 楼主| 发表于 2020-7-2 22:08:59 | 显示全部楼层
caocheng 发表于 2020-6-28 14:29
HA 0.111.4 没有了那个 ClimateDevice, 改成了 ClimateEntity 。 我手工修改了代码中的这个类
但是 日记里 ...

ClimateDevice只是被标记为deprecate了,代码上还是有这个类的,并且继承自ClimateEntity。可以调一下日志级别,看看是啥问题。猜测要么是IP设置错了,要么网关不是用ds-air控制的。
回复

使用道具 举报

2

主题

14

帖子

131

积分

论坛分享达人

积分
131
金钱
117
HASS币
0
发表于 2020-7-6 10:10:28 | 显示全部楼层
本帖最后由 caocheng 于 2020-7-6 12:29 编辑
mypal 发表于 2020-7-2 22:08
ClimateDevice只是被标记为deprecate了,代码上还是有这个类的,并且继承自ClimateEntity。可以调一下日 ...

114版本里,直接报错,我修改了,这个问题没有了
现在是协议解码有点不兼容, 我的网关型号和你不一样, 协议上稍有不同
subbody  的长度只有11个字节, 但你的代码里是按照12个字节解码的。这样解码到最后一个字节报错

我注释掉最后一个个字节的解码(好像是湿度挡位)后, 程序可以正常跑, 但web上没有看到实体注册成功
debug模式下,未能找到具体的问题。 只是日记报 60秒没有响应,但后台还在运作


还有些进展,我在你的github下面向你提问了,不知道能否提供些支持, 报文的内容我也贴出来了

b'\x02\x1b\x00\r\x00\x01\x00\x10\x00\x00\x00\x08\x17\x00\x00\x00\x00\x03\x00\x04\x00\x7f\x00\x00\x05\x0c\x04\x01\x00\x01\x03'
这是收到的报文
下面是  subbody  的内容,
b'\x04\x00\x7f\x00\x00\x05\x0c\x04\x01\x00\x01'
8,23的设备, 指令id是 3 , 按你代码来看应该是查询结果, 但长度11个字节,又像是状态改变结果

另外我家还有个8,25的设备,不晓得是什么设备,枚举了没有定义,我加上了,否则也会报错

不知道能否能直接联系你下,我自己先分析下这个内容,大部分没有问题



回复

使用道具 举报

2

主题

14

帖子

131

积分

论坛分享达人

积分
131
金钱
117
HASS币
0
发表于 2020-7-7 09:23:46 | 显示全部楼层
我也反编译了下源代码, 数据格式是不一样
  public void loadBytes(IoBuffer paramIoBuffer) {
    this.room = paramIoBuffer.getUnsigned();
    this.unit = paramIoBuffer.getUnsigned();
    byte b = paramIoBuffer.get();
    if ((b & 0x1) == 1)
      this._switch = PTLControl.Switch.valueOf(paramIoBuffer.get());
    if ((b >>> 1 & 0x1) == 1)
      this.mode = PTLControl.Mode.valueOf(paramIoBuffer.get());
    if ((b >>> 2 & 0x1) == 1)
      this.airFlow = PTLControl.AirFlow.valueOf(paramIoBuffer.get());
    if ((b >>> 3 & 0x1) == 1) {
      byte b1 = paramIoBuffer.get();
      boolean bool2 = false;
      if ((b1 & 0x8) == 8) {
        bool1 = true;
      } else {
        bool1 = false;
      }
      this.humAllow = bool1;
      boolean bool1 = bool2;
      if ((b1 & 0x4) == 4)
        bool1 = true;
      this.freshAirAllow = bool1;
      this.freshAirHumidification = PTLControl.FreshAirHumidification.valueOf((byte)(b1 & 0x3));
    }
    if ((b >>> 4 & 0x1) == 1)
      this.settedTemp = Short.valueOf(paramIoBuffer.getShort());
    if (Configs.isNewVersion.booleanValue()) {
      if ((b >>> 5 & 0x1) == 1) {
        byte b1 = paramIoBuffer.get();
        this.fanDirection2 = PTLControl.FanDirection.valueOf((byte)(b1 >>> 4 & 0xF));
        this.fanDirection1 = PTLControl.FanDirection.valueOf((byte)(b1 & 0xF));
      }
      if ((b >>> 6 & 0x1) == 1)
        this.humidity = PTLControl.Humidity.valueOf(paramIoBuffer.get());
      if (this.target.equals(PTLDevice.BATHROOM)) {
        if ((b >>> 7 & 0x1) == 1) {
          this.breathe = PTLControl.Breathe.valueOf(paramIoBuffer.get());
          return;
        }
      } else if (this.target.equals(PTLDevice.AIRCON) && (b >>> 7 & 0x1) == 1) {
        this.threeDFresh = PTLControl.ThreeDFresh.valueOf(paramIoBuffer.get());
      }
    }
  }
回复

使用道具 举报

2

主题

54

帖子

565

积分

论坛技术达人

积分
565
金钱
506
HASS币
20
 楼主| 发表于 2020-7-31 15:32:59 | 显示全部楼层
caocheng 发表于 2020-7-6 10:10
114版本里,直接报错,我修改了,这个问题没有了
现在是协议解码有点不兼容, 我的网关型号和你不一样,  ...

不好意思刚看到,如果有兴趣交流的话,可以私下微信。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 02:13 , Processed in 0.146440 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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