substitutions: duct_fan_pin: GPIO13 duct_fan_pwmfreq: 5000Hz duct_fan_spd_name: rack_3_duct_fan_spd amppwr_pin: GPIO19 amppwr_name: "Denon Pwr" dallas_pin: GPIO32 dallas_in_addr: "0x7F0114328974D728" dallas_in_name: Rack 3 Temp In dallas_out_addr: "0xB801143296ED7B28" dallas_out_name: Rack 3 Temp Out esphome: name: rack_3 platform: ESP32 board: esp32doit-devkit-v1 wifi: ssid: "kungle-ot" password: "ThingsWelcomeToKungle" manual_ip: static_ip: 192.168.37.74 gateway: 192.168.37.1 subnet: 255.255.255.0 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Rack 3 Fallback Hotspot" password: "jj0CXEgu3Lzo" captive_portal: output: - platform: ledc pin: ${duct_fan_pin} id: duct_fan_output_id frequency: ${duct_fan_pwmfreq} fan: - platform: speed id: duct_fan_spd_id output: duct_fan_output_id name: ${duct_fan_spd_name} dallas: - pin: number: ${dallas_pin} mode: INPUT_PULLUP update_interval: 10s sensor: - platform: dallas address: ${dallas_in_addr} name: ${dallas_in_name} - platform: dallas address: ${dallas_out_addr} name: ${dallas_out_name} id: dallas_out_id on_value: then: number.set: id: fan_speed_target_out value: !lambda |- float lo; float hi; lo = id(thermostat_rack3_out).target_temperature_low; hi = id(thermostat_rack3_out).target_temperature_high; if (x < lo) { return 0.0; } if (x > hi) { return 100.0; } return 100 * (x - lo) / (hi - lo); number: - platform: template id: fan_speed_target_in name: Fan Speed Target In optimistic: true min_value: 0 max_value: 100 step: 1 - platform: template id: fan_speed_target_out name: Fan Speed Target Out optimistic: true min_value: 0 max_value: 100 step: 1 on_value_range: above: 25.0 then: fan.turn_on: id: duct_fan_spd_id speed: !lambda |- return x; # Dual-point thermostat climate: - platform: thermostat id: thermostat_rack3_out name: Rack3 Out sensor: dallas_out_id visual: min_temperature: 60 °F max_temperature: 100 °F temperature_step: 1 default_mode: auto default_target_temperature_low: 75 °F default_target_temperature_high: 100 °F min_cooling_off_time: 60s min_cooling_run_time: 60s min_heating_off_time: 60s min_heating_run_time: 60s min_idle_time: 60s heat_action: - logger.log: "Turning off Rack3 Thermostat" - fan.turn_off: id: duct_fan_spd_id idle_action: - logger.log: "Turning on Rack3 Thermostat" cool_action: - logger.log: "WARNING: Rack3 Thermostat has hit high temp!" #TODO - provide some kind of warning / action here # Sense when receiver is turned on binary_sensor: - platform: gpio pin: ${amppwr_pin} name: ${amppwr_name} device_class: power # Enable logging logger: # Enable Home Assistant API api: ota: