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

 找回密码
 立即注册
查看: 18461|回复: 20

[新奇玩法] 控客红外+Homekit控制空调

[复制链接]

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
发表于 2019-5-20 05:35:55 | 显示全部楼层 |阅读模式
本帖最后由 chiunownow 于 2019-5-22 05:24 编辑

190522更新

  • 修改少量逻辑,似乎还有优化空间,不妨碍使用
  • 增加风扇 for homekit,在Homekit中风扇100%为大风,67%为中风,33%为小风,关闭为自动风速

前言

之前发过这么两个帖子:

控客插座红外控制空调(滑块温度+风速选择)

iOS 捷径 + HA API 控制 HA (以控客遥控空调为例子)

但是用 Shortcut 总归有一些不方便,还是想在 iOS 上用 Homekit 优雅地控制空调。

今天忘记哪来的灵感,挖掘了一下 HA 官方文档,发现了这个好东西:通用恒温器

190522补充

以下内容因空调控制方式差异巨大,同时每位用户录码方式可能存在差异,所以不具有广泛适用性。请根据自己的实际情况调整yaml配置文件内容。

实现效果

IMG_0105.gif

前方高能预警

这个 yaml 全是不会写真正的代码的我瞎搞的一堆骚操作。

使用前请先熟读 并背诵全文 控客插座红外控制空调(滑块温度+风速选择),确保会用了。

下面的代码大量与上面这个帖子重复,且需要根据自己的需求进行调整

不足

  1. 直接使用了 state.climate.zhu_wo_kong_diao ,输出值只有 idleoff(用于制冷和关机)。如果使用 {{state_attr('climate.zhu_wo_kong_diao','operation_mode')}} 的话,可以输出更多的值,实现更多操作。
  2. 通用恒温器没有风速控制功能,可以另外写一个模板风扇(参考文档),用于控制风速。  fix done

空调控制器完整Yaml


input_number:
  remote_temp_bedroom: #温度滑块
    min: 16
    max: 28
    initial: 24
    step: 1
    name: 空调温度
    unit_of_measurement: "℃"
    icon: mdi:thermometer

input_select:
  remote_fanspeed_bedroom: #风速选择下拉菜单
    name: 风速
    icon: mdi:weather-windy
    options:
      - "自动"
      - "小"
      - "中"
      - "大"

sensor:
  - platform: template #通用恒温器温度数值寄存
    sensors:
      climate_bedroom_ac:
        value_template: "{{state_attr('climate.zhu_wo_kong_diao','temperature') | int }}"

automation:
  - alias: "控客黑自动发送空调遥控信号"
    initial_state: true
    trigger:
      - platform: state
        entity_id: input_number.remote_temp_bedroom
      - platform: state
        entity_id: input_select.remote_fanspeed_bedroom
    action:
      service: script.toggle
      entity_id: script.remote_minikpro_turnon_ac
  - alias: "climate_temp" #通用恒温器调整温度时同步到温度控制滑块
    initial_state: true
    trigger: 
      platform: state
      entity_id: sensor.climate_bedroom_ac
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.remote_temp_bedroom
        value: "{{states('sensor.climate_bedroom_ac') | int }}"

  - alias: "climate_cooling" #通用恒温器调整模式到制冷时打开空调
    initial_state: true
    trigger:
      platform: state
      entity_id: climate.zhu_wo_kong_diao
      from: "off"
      to: "idle"
    action:
      service: script.toggle
      entity_id: script.remote_minikpro_turnon_ac

  - alias: "climate_turnoff" #通用恒温器调整模式到关闭时关闭空调
    initial_state: true
    trigger:
      platform: state
      entity_id: climate.zhu_wo_kong_diao
      from: "idle"
      to: "off"
    action:
      service: script.toggle
      entity_id: script.remote_minikpro_turnoff_ac

script:
  remote_minikpro_turnoff_ac: #发送关空调信号
    alias: 关空调
    sequence:
      - service: remote.send_command
        data:
          entity_id: remote.wo_shi_yao_kong
          command: ir_1000
      - service: input_boodlean.turn_off
        entity_id: input_boodlean.bedroom_ac

  remote_minikpro_turnon_ac:
    alias: 开空调 #发送开空调信号(对应滑块温度与下拉菜单风速)
    sequence:
      - service: remote.send_command
        data_template:
          entity_id: remote.wo_shi_yao_kong
          command: >
            {% if states.input_select.remote_fanspeed_bedroom.state == "自动" %}ir_{{ states('input_number.remote_temp_bedroom') | int }}00
            {%  elif states.input_select.remote_fanspeed_bedroom.state == "小" %}ir_{{ states('input_number.remote_temp_bedroom') | int }}01
            {%  elif states.input_select.remote_fanspeed_bedroom.state == "中" %}ir_{{ states('input_number.remote_temp_bedroom') | int }}02
            {%  elif states.input_select.remote_fanspeed_bedroom.state == "大" %}ir_{{ states('input_number.remote_temp_bedroom') | int }}03
            {% endif %}
      - service: input_boodlean.turn_on
        entity_id: input_boodlean.bedroom_ac

  set_acfan_speed_auto: #设置风速下拉菜单到自动
    sequence: 
      - service: input_select.select_option
        data: 
          entity_id: input_select.remote_fanspeed_bedroom
          option: "自动"

  set_acfan_speed_min: #设小风
    sequence:
      - service: input_select.select_option
        data: 
          entity_id: input_select.remote_fanspeed_bedroom
          option: "小"

  set_acfan_speed_medium: #设中风
    sequence:
      - service: input_select.select_option
        data: 
          entity_id: input_select.remote_fanspeed_bedroom
          option: "中"

  set_acfan_speed_large: #设大风
    sequence:
      - service: input_select.select_option
        data: 
          entity_id: input_select.remote_fanspeed_bedroom
          option: "大"

switch:
  - platform: template #通用恒温器所需模板开关
    switches:
      bedroom_ac:
        friendly_name: 主卧空调
        value_template: "{{ is_state('input_boolean.bedroom_ac', 'on') }}"
        turn_on:
          - service: script.toggle
            data:
              entity_id: script.remote_minikpro_turnon_ac
          - service: input_boodlean.turn_on
            data:
              entity_id: input_boodlean.bedroom_ac
        turn_off:
          - service: script.toggle
            data:
              entity_id: script.remote_minikpro_turnoff_ac
          - service: input_boodlean.turn_off
            data:
              entity_id: input_boodlean.bedroom_ac

input_boolean:
  bedroom_ac: #通用恒温器所需布尔值传感器
    name: 卧室空调
    initial: on

climate:
  - platform: generic_thermostat #通用恒温器 for homekit
    name: 主卧空调
    heater: switch.bedroom_ac
    target_sensor: sensor.climate_bedroom_ac
    min_temp: 16
    max_temp: 32
    ac_mode: true
    precision: 1

fan:
  - platform: template
    fans:
      ac_fan: #模板风扇 for homekit
        friendly_name: 空调风速
        value_template: "{{states('climate.zhu_wo_kong_diao')}}"
        speed_template: "{{states('input_select.remote_fanspeed_bedroom')}}"
        turn_on:
          service: script.remote_minikpro_turnon_ac
        turn_off:
          service: script.set_acfan_speed_auto
        speeds:
          - "自动"
          - "小"
          - "中"
          - "大"
        set_speed: 
          service_template: >
            {% if speed == '自动' %}
              script.set_acfan_speed_auto
            {% elif speed == '小' %}
              script.set_acfan_speed_min
            {% elif speed == '中' %}
              script.set_acfan_speed_medium
            {% elif speed == '大' %}
              script.set_acfan_speed_large
            {% endif %}



评分

参与人数 2金钱 +30 收起 理由
goldstep + 10 感谢楼主分享!
+ 20 感谢楼主深夜发贴分享!

查看全部评分

回复

使用道具 举报

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
 楼主| 发表于 2019-5-20 07:22:07 | 显示全部楼层
试了一下Template Fan控制风速,感觉可能有坑
"{{state_attr('fan.bedroom_ac_fan','speed')}}"输出的值为value_template定义的值,而不是set_speed时的值。
可能的解决方法:https://community.home-assistant ... fan-set-speed/80280
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-5-20 08:40:25 | 显示全部楼层
牛逼了 看来我homekit无法连接的问题一定要解决了~
回复

使用道具 举报

27

主题

2143

帖子

8932

积分

论坛元老

Rank: 8Rank: 8

积分
8932
金钱
6784
HASS币
30

论坛元老

发表于 2019-5-20 08:43:08 | 显示全部楼层
感谢大佬,上次说用捷径弯道超车,我到现在都懒得弄,这次貌似可以直接吃鸡了
回复

使用道具 举报

13

主题

88

帖子

862

积分

论坛技术达人

积分
862
金钱
769
HASS币
20
发表于 2019-5-20 12:02:25 | 显示全部楼层
非常厉害!可惜我现在控客还不能显示在0.93版本上,不知道大神有么有安装方法给我参考一下?
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-5-20 16:03:32 | 显示全部楼层
marcozy 发表于 2019-5-20 12:02
非常厉害!可惜我现在控客还不能显示在0.93版本上,不知道大神有么有安装方法给我参考一下? ...

0.92我都没上  
回复

使用道具 举报

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
 楼主| 发表于 2019-5-21 08:11:57 | 显示全部楼层

我也没搞定,所以停在091上
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-5-21 09:02:34 | 显示全部楼层
chiunownow 发表于 2019-5-21 08:11
我也没搞定,所以停在091上

控客这个要个依赖  konkeio
konkeio.py里面也有依赖需求  手动解决这些需求看看?
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-5-21 10:34:08 | 显示全部楼层
今天细看了一下  还是没太明白  还是要参考下官方教程做理解
回复

使用道具 举报

7

主题

348

帖子

1084

积分

金牌会员

Rank: 6Rank: 6

积分
1084
金钱
736
HASS币
0
发表于 2019-5-21 17:07:42 | 显示全部楼层
收藏了备用……红外接收灵不灵?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 06:24 , Processed in 0.607713 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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