caocheng 发表于 2020-7-8 15:49:54

正在0.111.4版本上修改mypal大神的大金空调金制空气版本的...

本帖最后由 caocheng 于 2020-7-9 16:03 编辑


2020-07-09
今天完成了实体注册部分的改造, HA里可以看到 大金空调的,新版,老板空调的实体, 也能开关
这个版本控制的网关类型是: DTA117C611 ,程序还在开发完善中
欢迎大金一起测试开发
https://github.com/hicaoc/ha-dsair


---------------------------------------------------------------------------------------
正在0.111.4版本上修改mypal大神的大金空调金制空气版本的的插件
发给贴,记录下过程,希望有兴趣的朋友一起参与

目前进展如下
1. 插件可以和设备通信, 查询房间,查询空调状态,空调状态消息解码基本正常
2. 新设备支持几种新设备, 下面贴出来
2.金制空气版本的,空调当前温度,已经不在空调状态中,看源代码,应该要通过查询场景才能得到,还在研究代码
3.目前设备还不能注册到实体中,正在分析mypal的代码

class EnumDevice(Enum):
    SYSTEM = (0, 0)
    AIRCON = (8, 18)
    GEOTHERMIC = (8, 19)
    VENTILATION = (8, 20)
    HD = (8, 22)
    NEWAIRCON = (8, 23)
    BATHROOM = (8, 24)
    SENSOR = (8, 25)
    IP_MESH_COMMON = (10, 47)
    MESHID_MESH_COMMON = (12, 47)
    IP_LSM = (10, 33)
    MESHID_LSM = (12, 33)
    IP_MESH_SENSOR = (10, 25)
    MESHID_MESH_SENSOR = (12, 25)
    SLEEP_SENSOR = (10, 48)
    IP_RA = (10, 34)
    MESHID_RA = (12, 34)
    SECURITY_MONITOR = (8, 49)



class EnumCmdType(IntEnum):
    AIR_CAPABILITY_QUERY = 6
    AIR_CON_CAPABILITY_V2 = 35
    AIR_CON_CLEANING_V = 36
    AIR_RECOMMENDED_INDOOR_TEMP = 4
    AIR_SCENARIO_CONTROL = 32
    CONTROL = 1
    QUERY_SCENARIO_SETTING = 34
    QUERY_STATUS = 3
    SCENARIO_SETTING = 33
    STATUS_CHANGED = 2
    SYS_ACK = 1
    SYS_CHANGE_PW = 17
    SYS_CMD_RSP = 2
    SYS_CMD_TRANSFER = 40961
    SYS_CMD_TRANSFER_TARGET_QUIT = 40962
    SYS_ERR_CODE = 6
    SYS_FILTER_CLEAN_SIGN = 9
    SYS_FILTER_CLEAN_SIGN_RESET = 21
    SYS_GET_ROOM_INFO = 48
    SYS_GET_WEATHER = 7
    SYS_HAND_SHAKE = 40960
    SYS_LOGIN = 16
    SYS_QUERY_SCHEDULE_FINISH = 68
    SYS_QUERY_SCHEDULE = 69
    SYS_QUERY_SCHEDULE_ID = 66
    SYS_QUERY_SCHEDULE_SETTING = 65
    SYS_SCENARIO_CONTROL = 67
    SYS_SCHEDULE_SETTING = 64
    SYS_SET_BASIC_ROOM_INFO = 49
    SYS_TIME_SYNC = 5
    SYS_GET_GW_INFO = 80
    SYS_SET_GW_INFO = 81
    SYS_AUTO_ADDRESS = 82
    SYS_RESTORE_SETTINGS = 83
    SYS_CHECK_NEW_VERSION = 85
    SYS_VERSION_UP_MODE = 86
    SYS_VERSION_UP_STUATUS = 87
    SYS_SET_DISTRIBUTOR_INFO = 88
    SYS_SET_AREA_INFO = 89
    SYS_BIND_OR_UNBIND_SENSOR = 96
    SYS_GET_SENSOR_IN_ROOMS = 98
    SYS_GET_ALL_SENSOR_STATE = 99
    SYS_RESTART = 40963
    SYS_TRANSFER_FAIL = 40964

class FreshAirHumidification(IntEnum):
    OFF = 0
    FRESH_AIR = 5
    HUM_FRESH_AIR = 5

class ThreeDFresh(IntEnum):
    AUTO = 1
    CLOSE = 0
    STRONG = 0
    WEAK = 1

class AirConStatusChangedResult(BaseResult):
    def __init__(self, cmd_id: int, target: EnumDevice):
      BaseResult.__init__(self, cmd_id, target, EnumCmdType.STATUS_CHANGED)
      self._room = 0               # type: int
      self._unit = 0               # type: int
      self._status = AirConStatus()# type: AirConStatus

    def load_bytes(self, b):
      d = Decode(b)
      self.room = d.read1()
      self.unit = d.read1()
      flag = d.read1()

      if flag & 1:
            self.switch = EnumControl.Switch(d.read1())
      if flag >> 1 & 1:
            self.mode = EnumControl.Mode(d.read1())
      if flag >> 2 & 1:
            self.air_flow = EnumControl.AirFlow(d.read1())
      if flag >> 3 & 1:
            b1 = d.read1()
            if b1 & 0x8:
                self.hum_allow = True
            else:
                self.hum_allow = False
            if b1 & 0x4:
                self.hum_allow = True
            self.fresh_air_allow = self.hum_allow
            self.fresh_air_humidification = EnumControl.FreshAirHumidification(b1 & 0x3)

      if flag >> 4 & 1:
            self.setted_temp = d.read1()
      if Config.is_new_version:
            if flag >> 5 & 1:
                b = d.read1()
                self.fan_direction1 = EnumControl.FanDirection(b & 0xf)
                self.fan_direction2 = EnumControl.FanDirection(b >> 4 & 0xf)
            if flag >> 6 & 1:
                  self.humidity = EnumControl.Humidity(d.read1())
            if self.target == EnumDevice.BATHROOM:
                if flag >> 7 & 1:
                  self.breathe = EnumControl.Breathe(d.read1())
                  return
            elif (self.target == EnumDevice.AIRCON) and (flag >> 7 & 1):
                self.three_dfresh = EnumControl.ThreeDFresh(d.read1())


    def do(self):
      from .service import Service
      Service.update_aircon(self.target, self._room, self._unit, status=self._status)

cqzz1 发表于 2020-7-8 16:25:51

不明觉厉   看看

ybcswz 发表于 2020-7-8 17:22:57

我准备照葫芦画瓢搞个日立的,精力和水平都有限,老了,唉

hlwqcc 发表于 2020-8-2 19:40:25

期待有进展,这个版本的ds-air闲鱼只要300元,能成功接入就太棒了!

caocheng 发表于 2020-8-3 15:31:16

hlwqcc 发表于 2020-8-2 19:40
期待有进展,这个版本的ds-air闲鱼只要300元,能成功接入就太棒了!

已经可以接入了,还有些小毛病,最佳忙,没时间完善。

hlwqcc 发表于 2020-8-6 01:15:26

caocheng 发表于 2020-8-3 15:31
已经可以接入了,还有些小毛病,最佳忙,没时间完善。

厉害,期待完善

orangeyz 发表于 2020-8-22 07:26:21

楼主,加油,我已经用上了,但是家里一共有5台机器,只显示出了两台

kai666 发表于 2020-8-25 09:59:45

大佬帮忙看看啥情况。You are using a custom integration for ds_air which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant.

kai666 发表于 2020-8-25 10:01:28

Error setting up integration climate - received exception
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/setup.py", line 64, in async_setup_component
    return await task# type: ignore
File "/usr/src/homeassistant/homeassistant/setup.py", line 150, in _async_setup_component
    processed_config = await conf_util.async_process_component_config(
File "/usr/src/homeassistant/homeassistant/config.py", line 804, in async_process_component_config
    platform = p_integration.get_platform(domain)
File "/usr/src/homeassistant/homeassistant/loader.py", line 389, in get_platform
    cache = importlib.import_module(
File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name, package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 779, in exec_module
File "<frozen importlib._bootstrap_external>", line 916, in get_code
File "<frozen importlib._bootstrap_external>", line 846, in source_to_code
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/config/custom_components/ds_air/climate.py", line 31
    SWING_LIST = ['➡️', '↘️', '⬇️', '↙️', '⬅️', '↔️', 'ߔ䧝
                                                      ^
SyntaxError: EOL while scanning string literal

apple4105 发表于 2020-9-15 00:20:13

hlwqcc 发表于 2020-8-6 01:15
厉害,期待完善

300块哪里买
页: [1] 2 3 4 5 6 7 8
查看完整版本: 正在0.111.4版本上修改mypal大神的大金空调金制空气版本的...