自制无极调速风扇,EspHome固件 接入Home assistant 源码

天气转凉,设备也降温了,可恶的噪声是时候该消停了,什么?你的风扇不能调速?来来,那我们换一个

首先去海鲜市场买个服务器用的暴力风扇,因为句便宜,还质量好,大概也就20块而已。

这我选华为的8cm风扇,如图

剪掉专用接头,改接通用风扇4PIN接头就是两个正常的4PIN风扇啦

附上改装后的风扇及白嫖的PCB板,主控用的是Esp01S,这模块胜在够便宜,而且拆装方便,缺点就是存储空间不足需要线刷,不过便宜就完了。

成品装好后如图,颜值还是不错的

上代码

substitutions:
  device_name: "tempfan01s"
  friendly_name: "tempfan01s"
  comment: "tempfan01s"
  version: "1.0.0"
  speed_low: "20"
  speed_med: "50"
  speed_full: "100"



esphome:
  name: "${friendly_name}"
  friendly_name: "${friendly_name}"
  on_boot:
    then:
      - delay: 3s
      - fan.turn_off:
          id: ${friendly_name}_fan
      - delay: 3s
      - fan.turn_on:
          id: ${friendly_name}_fan
          speed: "${speed_low}"
      - delay: 3s
      - fan.turn_off:
          id: ${friendly_name}_fan


esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "tempjSOexvjEi/BBt1PWpibuerWU4FXpOCAhPdFlfhk="
  reboot_timeout: 0s
ota:
  password: "temp3eff6eee40ff24dd81c0705b8d35"

wifi:
  ssid: wushi-2.4
  password: ++0123--

  manual_ip:
    static_ip: 192.168.1.119   ##固定此设备IP地址为192.168.1.100;
    gateway: 192.168.1.1        ##路由器、网关地址;
    subnet: 255.255.255.0         ##子网掩码;

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: '${friendly_name}_wifi '
    password: "aabb++--"

captive_portal:
fan:
  - platform: speed
    id: "${friendly_name}_fan"
    output: pwm_output
    speed_count: 100
    name: "${device_name} 开关"

output:
  - platform: esp8266_pwm
    pin: GPIO0
    frequency: 15000 Hz
    id: pwm_output

number:
  - platform: template
    icon: "mdi:fan"
    id: ${friendly_name}_speed_input
    name: "${device_name} 风速"
    lambda: |-
      return id(${friendly_name}_fan).speed;
    step: 1
    min_value: 1
    max_value: 100
    unit_of_measurement: "%"
    update_interval: 1s
    set_action:
      then:
        - fan.turn_on:
            id: ${friendly_name}_fan
            speed: !lambda "return x;"
        - component.update: ${friendly_name}_fanmode
        - component.update: ${friendly_name}_sensor_fanspeed

select:
  - platform: template
    icon: "mdi:fan"
    name: "${device_name} 模式"
    id: ${friendly_name}_fanmode
    update_interval: 1s
    lambda: |-
      if(id(${friendly_name}_fan).speed <= ${speed_low})
        return std::string("Low");
      else if(id(${friendly_name}_fan).speed == ${speed_med})
        return std::string("Medium");
      else if(id(${friendly_name}_fan).speed >= ${speed_full})
        return std::string("Full");
      else
        return std::string("Custom");
    set_action:
      then:
        - lambda: |-
            auto call = id(${friendly_name}_fan).turn_on();

            if(x == "Low")
              call.set_speed(${speed_low});
            else if(x == "Medium")
              call.set_speed(${speed_med});
            else if(x == "Full")
              call.set_speed(${speed_full});
            else
              call.set_speed(id(${friendly_name}_speed_input).state);
              
            call.perform();
        - component.update: ${friendly_name}_speed_input
        - component.update: ${friendly_name}_sensor_fanspeed
    options:
      - Low
      - Medium
      - Full
      - Custom

button:
  - platform: template
    icon: "mdi:fan-speed-1"
    name: "${device_name} Low"
    on_press:
      - fan.turn_on:
          id: ${friendly_name}_fan
          speed: "${speed_low}"
  - platform: template
    icon: "mdi:fan-speed-2"
    name: "${device_name} Med"
    on_press:
      - fan.turn_on:
          id: ${friendly_name}_fan
          speed: "${speed_med}"
  - platform: template
    icon: "mdi:fan-speed-3"
    name: "${device_name} Full"
    on_press:
      - fan.turn_on:
          id: ${friendly_name}_fan
          speed: "${speed_full}"
  - platform: restart
    name: "${device_name} 初始化"

sensor:
  - platform: template
    id: ${friendly_name}_sensor_fanspeed
    icon: "mdi:fan"
    name: "风扇速度"
    lambda: |-
      return id(${friendly_name}_fan).speed;
    update_interval: 1s
    accuracy_decimals: 0
    unit_of_measurement: "%"
  - platform: dht
    model: DHT22
    pin: GPIO2
    temperature:
      on_value_range:
      - below: 30.0
        then:
          - fan.turn_off: ${friendly_name}_fan
      - above: 30.0
        below: 40.0
        then:
          - fan.turn_on:
              id: ${friendly_name}_fan
              speed: "${speed_low}"
      - above: 40.0
        below: 45.0
        then:
          - fan.turn_on:
              id: ${friendly_name}_fan
              speed: "${speed_med}"
      - above: 50.0
        then:
          - fan.turn_on:
              id: ${friendly_name}_fan
              speed: "${speed_full}"
      name: "${friendly_name}_temp"
    humidity:
      name: "${friendly_name}_Humidity"
    update_interval: 3s
    

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值