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

 找回密码
 立即注册
查看: 16166|回复: 37

[插件集成] (代码S大已合并)修改syssi大神米家空调伴侣插件适配HA 0.96

[复制链接]

3

主题

173

帖子

1582

积分

论坛技术达人

积分
1582
金钱
1409
HASS币
0
发表于 2019-8-1 22:11:34 | 显示全部楼层 |阅读模式
本帖最后由 x01673 于 2019-8-2 15:00 编辑

----------------------------------------------------------------------------------------------------------

8/2号更新,提交的PR,S大已合并,可以到https://github.com/syssi/xiaomi_airconditioningcompanion 直接下载了


----------------------------------------------------------------------------------------------------------
HA 0.96更新,Climate组件改动很大,导致syssi大神的空调伴侣已不能再用。
S大的repo已经有人提交了issue https://github.com/syssi/xiaomi_airconditioningcompanion/issues/67
但是啥时候更新,目前还是未知数(S大感觉很忙)

今天 @neroxps 建议我提交PR给S大。
但是由于对Python不是很熟,代码写的可能不符合规范。
这里就分享出来,论坛的Python大神可以给个参考哇?。
也请各位有空调伴侣的帮忙测试一下是否有问题。

如果没有问题的话,我就直接提交PR了。

很少发帖,感觉很乱,见谅。


以下是关键代码修改部分:
  @asyncio.coroutine
    def async_update(self):
        """Update the state of this climate device."""
        from miio import DeviceException

        try:
            state = yield from self.hass.async_add_job(self._device.status)
            _LOGGER.debug("Got new state: %s", state)

            self._available = True
            self._state_attrs.update({
                ATTR_AIR_CONDITION_MODEL: state.air_condition_model.hex(),
                ATTR_LOAD_POWER: state.load_power,
                ATTR_TEMPERATURE: state.target_temperature,
                ATTR_SWING_MODE: state.swing_mode.name.lower(),
                ATTR_FAN_MODE: state.fan_speed.name.lower(),
                ATTR_HVAC_MODE: state.mode.name.lower() if self._state else "off",
                ATTR_LED: state.led,
            })
            """新增变量(属性)_last_on_operation从miio获取的空调的操作(heat, cool, fan_only, dry)"""
            self._last_on_operation = OperationMode[state.mode.name].value
           """miio获取到空调处于关机状态时, hvac_mode值为off"""
            if state.power == 'off':
                self._hvac_mode = HVAC_MODE_OFF
                self._state = False           
           """开机状态时, hvac_mode值等于_last_on_operation"""
            else:
                self._hvac_mode = self._last_on_operation
                self._state = True
            self._target_temperature = state.target_temperature
            self._fan_mode = state.fan_speed
            self._swing_mode = state.swing_mode
            if self._air_condition_model is None:
                self._air_condition_model = state.air_condition_model.hex()

        except DeviceException as ex:
            self._available = False
            _LOGGER.error("Got exception while fetching the state: %s", ex)

    
@asyncio.coroutine
    def async_set_hvac_mode(self, hvac_mode):
        """Set new target hvac mode."""
        if hvac_mode == OperationMode.Off.value:
            result = yield from self._try_command(
                "Turning the miio device off failed.", self._device.off)
            if result:
                self._state = False
                self._hvac_mode = HVAC_MODE_OFF
        else:
            self._hvac_mode = OperationMode(hvac_mode).value
            self._state = True
            yield from self._send_configuration()


   @asyncio.coroutine
    def _send_configuration(self):
        from miio.airconditioningcompanion import \
            Power, Led, OperationMode as MiioOperationMode
    """确保不将hvac_mode为off状态时,直接传给miio,否者会报错"""
        if self._air_condition_model is not None:
            yield from self._try_command(
                "Sending new air conditioner configuration failed.",
                self._device.send_configuration,
                self._air_condition_model,
                Power(int(self._state)),
                MiioOperationMode[OperationMode(self._hvac_mode).name] if self._state else MiioOperationMode[OperationMode(self._last_on_operation).name],
                int(self._target_temperature),
                self._fan_mode,
                self._swing_mode,
                Led.Off,
            )
        else:
            _LOGGER.error('Model number of the air condition unknown. '
                          'Configuration cannot be sent.')

附件是完整的修改版




climate.py

17.69 KB, 下载次数: 55

评分

参与人数 6金钱 +83 收起 理由
neroxps + 20 辛苦了
ddkens + 5 好像不能通过功率来反馈空调开关状态?.
咸味土豆 + 20 大神666,风扇的有没有可能更新一下。.
uavana + 8 论坛有你更精彩!
+ 20 虽然用不到,但是非常感谢~
jyz_0501 + 10 虽然用不到,但是非常感谢~

查看全部评分

回复

使用道具 举报

23

主题

1338

帖子

6755

积分

超级版主

Rank: 8Rank: 8

积分
6755
金钱
5392
HASS币
100

教程狂人

发表于 2019-8-1 22:22:45 | 显示全部楼层
强烈支持
回复

使用道具 举报

175

主题

2967

帖子

7606

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7606
金钱
4614
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2019-8-1 23:04:19 | 显示全部楼层
火钳刘明~
回复

使用道具 举报

30

主题

997

帖子

4151

积分

论坛元老

Rank: 8Rank: 8

积分
4151
金钱
3149
HASS币
0

活跃会员

发表于 2019-8-1 23:11:01 | 显示全部楼层
正需要这东西
回复

使用道具 举报

18

主题

704

帖子

4024

积分

元老级技术达人

积分
4024
金钱
3310
HASS币
60
发表于 2019-8-1 23:13:22 | 显示全部楼层
只有米家那个60几块的便宜货,还在期待大佬开发。
回复

使用道具 举报

0

主题

101

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
金钱
137
HASS币
0
发表于 2019-8-1 23:40:55 | 显示全部楼层
感谢奉献!
回复

使用道具 举报

12

主题

327

帖子

1814

积分

论坛技术达人

积分
1814
金钱
1482
HASS币
40
发表于 2019-8-1 23:44:21 | 显示全部楼层
支持一下,升级96指日可待,谢谢
回复

使用道具 举报

8

主题

2073

帖子

6053

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6053
金钱
3980
HASS币
145

灌水之王

发表于 2019-8-2 07:20:57 | 显示全部楼层
关注下空调这一块
回复

使用道具 举报

16

主题

217

帖子

2229

积分

论坛技术达人

积分
2229
金钱
1977
HASS币
140
发表于 2019-8-2 08:15:41 | 显示全部楼层
亲测可用
回复

使用道具 举报

7

主题

366

帖子

1328

积分

金牌会员

Rank: 6Rank: 6

积分
1328
金钱
962
HASS币
0
发表于 2019-8-2 09:18:47 | 显示全部楼层
支持啊,每次ha升级都改动 这点很烦
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 19:53 , Processed in 0.125373 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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