79 lines
1.6 KiB
YAML
79 lines
1.6 KiB
YAML
substitutions:
|
|
device_name: fdm-exhaust-fan-control
|
|
friendly_name: "FDM Exhaust Fan Control"
|
|
|
|
esphome:
|
|
name: ${device_name}
|
|
friendly_name: ${friendly_name}
|
|
|
|
esp32:
|
|
board: seeed_xiao_esp32c3
|
|
framework:
|
|
type: esp-idf
|
|
|
|
# Enable logging
|
|
logger:
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
encryption:
|
|
key: !secret api_encryption_key
|
|
|
|
ota:
|
|
- platform: esphome
|
|
password: !secret ota_password
|
|
|
|
wifi:
|
|
ssid: !secret wifi_iot_ssid
|
|
password: !secret wifi_password
|
|
ap:
|
|
ssid: "${friendly_name} Fallback"
|
|
password: !secret fallback_password
|
|
|
|
captive_portal:
|
|
|
|
web_server:
|
|
port: 80
|
|
|
|
# GPIO Outputs for fan control
|
|
# IMPORTANT: inverted: true because NPN transistor driver inverts the logic
|
|
# GPIO HIGH -> NPN ON -> Gate LOW -> Fan OFF
|
|
# GPIO LOW -> NPN OFF -> Gate HIGH (5V via pull-up) -> Fan ON
|
|
output:
|
|
- platform: gpio
|
|
pin:
|
|
number: GPIO3 # D1 on XIAO
|
|
inverted: true
|
|
id: fan_80mm_output
|
|
|
|
- platform: gpio
|
|
pin:
|
|
number: GPIO4 # D2 on XIAO
|
|
inverted: true
|
|
id: fan_120mm_output
|
|
|
|
# Fan entities for Home Assistant
|
|
fan:
|
|
- platform: binary
|
|
name: "80mm Exhaust Fan"
|
|
id: fan_80mm
|
|
output: fan_80mm_output
|
|
|
|
- platform: binary
|
|
name: "120mm Exhaust Fan"
|
|
id: fan_120mm
|
|
output: fan_120mm_output
|
|
|
|
# Optional: Add a switch to control both fans together
|
|
switch:
|
|
- platform: template
|
|
name: "All Fans"
|
|
id: all_fans
|
|
turn_on_action:
|
|
- fan.turn_on: fan_80mm
|
|
- fan.turn_on: fan_120mm
|
|
turn_off_action:
|
|
- fan.turn_off: fan_80mm
|
|
- fan.turn_off: fan_120mm
|
|
lambda: |-
|
|
return id(fan_80mm).state && id(fan_120mm).state; |