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

 找回密码
 立即注册
查看: 16393|回复: 31

[技术探讨] 摸着石头过河,DIY把普通风扇改造接入ha

[复制链接]

55

主题

618

帖子

3774

积分

论坛元老

Rank: 8Rank: 8

积分
3774
金钱
3151
HASS币
20
发表于 2021-3-6 18:28:02 | 显示全部楼层 |阅读模式
本帖最后由 gmshiwoge 于 2021-3-6 18:31 编辑

天气越来越热了,心想怎么把普通风扇接入ha,学习了几遍论坛的diy改造风扇帖子确定亲自动手试试
esp8266----------- 一个
5v变压器---------- 一个
3路继电器-------- 一个
风扇开关改造一下 拆开把里面的卡扣拿出来,原本按一下会卡着,需要按第一个按钮才可以回弹,现在一下自动回弹。
软件的是esphome。按键设定 按一下开/关。 长按1秒上面3个任意按键关
现在有个小问题, 风扇在第一次通电,GPIO16回接通0点几秒后关闭,不知道怎么解决


esphome:
name: esp8266_fan
platform: ESP8266
board: esp01_1m

wifi:
ssid: "XXX"
password: "XXXXXXXXXXXX"
fast_connect: on
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32 01 Fan"
password: "1355955z"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:


ota:

#esp32_ble_tracker:

web_server:
port: 80
css_url: https://esphome.io/_static/webserver-v1.min.css
js_url: https://esphome.io/_static/webserver-v1.min.js


switch:
- platform: restart
name: "rst_esp32_fan"

- platform: gpio
name: "fanlow"
pin: 15
id: low
interlock: [mid, fast]

- platform: gpio
name: "fanmid" 
pin: 16
id: mid
interlock: [low, fast]

- platform: gpio
name: "fanfast"
pin: 04
id: fast 
interlock: [low, mid] 
#- platform: gpio
#name: "quanguan"
#pin: 4
#inverted: yes
#id: qg 
#interlock: [low, mid,fast] 

binary_sensor: 
#- platform: status
#连接状态
#name: "esp32_fan"


- platform: gpio
pin: 
number: 5 #io1接人体感应器
inverted: yes
mode: INPUT
name: "人体感应器1"
device_class: motion
id: pir501
filters:
- invert:
- delayed_on: 500ms
- delayed_off: 30s


- platform: gpio
pin:
number: GPIO14
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 10ms
max_length: 500ms
then:
- switch.toggle: low 

- platform: gpio
pin:
number: GPIO12
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 10ms
max_length: 500ms
then:
- switch.toggle: mid 

- platform: gpio
pin:
number: GPIO13
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 10ms
max_length: 500ms
then:
- switch.toggle: fast


- platform: gpio
pin:
number: GPIO13
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 600ms
max_length: 5000ms
then:
- switch.turn_off: fast
- switch.turn_off: mid
- switch.turn_off: low

- platform: gpio
pin:
number: GPIO14
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 600ms
max_length: 5000ms
then:
- switch.turn_off: fast
- switch.turn_off: mid
- switch.turn_off: low

- platform: gpio
pin:
number: GPIO12
mode: INPUT_PULLUP
inverted: True
name: "fasttouch"
on_click:
min_length: 600ms
max_length: 5000ms
then:
- switch.turn_off: fast
- switch.turn_off: mid
- switch.turn_off: low

sensor: 
 - platform: template
    sensors:
      fan_speeds:
        value_template: >
          {% if states('switch.fanlow') == 'unavailable' %}
            unavailable
          {% elif states('switch.fanfast') == 'on' %}
            高速
          {% elif states('switch.fanmid') == 'on' %}
            中速
          {% elif states('switch.fanlow') == 'on' %}
            低速
          {% else %}
            关闭            
          {% endif %}


fan:                                                                               #建立一个fan元件
  - platform: template
    fans:
      fan_speed:
        value_template: >
          {% if is_state("sensor.fan_speeds", "unavailable") %}
            off
          {% elif states('sensor.fan_speeds') == '关闭' %}
            off
          {% else %}
            on
          {% endif %}
        speed_template: '{{ states("sensor.fan_speeds") }}'
        turn_on:
          - service: switch.turn_on
            entity_id: switch.fanlow
        turn_off:
          - service: switch.turn_off
            entity_id: switch.fanlow
          - service: switch.turn_off
            entity_id: switch.fanmid
          - service: switch.turn_off
            entity_id: switch.fanfast
        set_speed:
          - service: switch.turn_on
            data_template:
              entity_id: >
                {% if speed == '低速' %}
                  switch.fanlow
                {% elif speed == '中速' %}
                  switch.fanmid
                {% elif speed == '高速' %}
                  switch.fanfast
                {% elif speed == '关闭' %}
                  switch.off
                {% endif %}
        speeds:
          - '关闭'
          - '低速'
          - '中速'
          - '高速'


homekit:
  filter:
    include_domains:
      - fan



tempImage5ziXdM.jpg
tempImage2uCkvU.jpg
风扇diy.jpg

评分

参与人数 5金钱 +43 HASS币 +20 收起 理由
taida + 5
sorrypqa + 8 大神666!
neoyang + 5
+ 20 + 20 厉害了word楼主!
kleinsoul + 5 感谢楼主分享!

查看全部评分

回复

使用道具 举报

10

主题

60

帖子

506

积分

高级会员

Rank: 4

积分
506
金钱
446
HASS币
0
发表于 2021-3-8 11:23:12 | 显示全部楼层
改装类大神多,发详细教程的几乎没有。
回复

使用道具 举报

11

主题

324

帖子

1332

积分

金牌会员

Rank: 6Rank: 6

积分
1332
金钱
1008
HASS币
0
发表于 2021-3-9 18:03:54 | 显示全部楼层
厉害了我的楼主
回复

使用道具 举报

1

主题

189

帖子

1917

积分

金牌会员

Rank: 6Rank: 6

积分
1917
金钱
1728
HASS币
0
发表于 2021-3-12 03:07:21 | 显示全部楼层
这个好!可以按图索骥
回复

使用道具 举报

0

主题

20

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
金钱
259
HASS币
0
发表于 2021-3-13 14:29:07 | 显示全部楼层
学习学习!
回复

使用道具 举报

20

主题

120

帖子

766

积分

高级会员

Rank: 4

积分
766
金钱
646
HASS币
0
发表于 2023-3-14 18:28:40 | 显示全部楼层
为什么下面传感器和风扇代码用不了呢?要报错,新版本不支持?
回复

使用道具 举报

55

主题

618

帖子

3774

积分

论坛元老

Rank: 8Rank: 8

积分
3774
金钱
3151
HASS币
20
 楼主| 发表于 2023-3-15 08:41:56 | 显示全部楼层
taida 发表于 2023-3-14 18:28
为什么下面传感器和风扇代码用不了呢?要报错,新版本不支持?

是的是的 ha更新了
回复

使用道具 举报

20

主题

120

帖子

766

积分

高级会员

Rank: 4

积分
766
金钱
646
HASS币
0
发表于 2023-3-15 09:21:54 | 显示全部楼层
本帖最后由 taida 于 2023-3-15 09:25 编辑

不清楚的,只有在试试,谢谢啦,@gmshiwoge

yaml文件添加fan出错

yaml文件添加fan出错
回复

使用道具 举报

55

主题

618

帖子

3774

积分

论坛元老

Rank: 8Rank: 8

积分
3774
金钱
3151
HASS币
20
 楼主| 发表于 2023-3-15 09:57:41 | 显示全部楼层
taida 发表于 2023-3-15 09:21
不清楚的,只有在试试,谢谢啦,@gmshiwoge

我后面修改的
fan:                                                                               #建立一个fan元件
  - platform: template
    fans:
      fan_speed:
        value_template: >
          {% if is_state("sensor.fan_speeds", "unavailable") %}
            off
          {% elif states('sensor.fan_speeds') == '关闭' %}
            off
          {% else %}
            on
          {% endif %}
        percentage_template: >-
             {%if states("switch.fanfast") == 'on' -%}
              100
             {%- elif states("switch.fanmid") == 'on' -%}
              66
             {%- elif states("switch.fanlow") == 'on' -%}
              33
             {%- else -%}
              0
             {%- endif %}
        turn_on:
          - service: switch.turn_on
            entity_id: switch.fanlow
        turn_off:
          - service: script.turn_on
            entity_id: script.fan_off
        set_percentage:
          service: homeassistant.turn_on
          target:
            entity_id: >-
              {%if percentage>0 and percentage <=33 -%}
                {% set percentage=33 %}
              {%- elif percentage>33 and percentage <=66 -%}
                {% set percentage=66 %}
              {%- elif percentage>66 -%}
                {% set percentage=100 %}
              {%- else -%}
                {% set percentage=0 %}
              {%- endif %}
              
              {%if percentage == 100 -%}
                switch.fanfast
              {%- elif percentage ==66 -%}
                switch.fanmid
              {%- elif percentage ==33 -%}
                switch.fanlow
              {%- else -%}
                script.fan_off
              {%- endif %}
        speed_count: 3

回复

使用道具 举报

20

主题

120

帖子

766

积分

高级会员

Rank: 4

积分
766
金钱
646
HASS币
0
发表于 2023-3-15 10:09:37 | 显示全部楼层
谢谢@gmshiwoge ,我试试,
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 05:25 , Processed in 0.062978 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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